2012-01-12 4 views
1

Я смотрел на тег cfhttp, и можно использовать его для передачи переменных по нажатой ссылке?cfhttp Передача переменных POST по ссылке, которая нажата?

<cfhttp method="Post" url="myurl"> 

Я пытаюсь передать переменные по ссылке клика (например, пользователь ID), но это кажется немного небезопасно для отправки через GET ...

+2

Помните, что при использовании CFHTTP запрос HTTP будет поступать с сервера ColdFusion, а не из браузера пользователя. Это может изменить ситуацию. – ale

+0

На самом деле нет ничего более безопасного в отношении POST над GET, кроме того, что легче видеть переменную в запросе GET. –

+1

Я немного смущен некоторыми из этих ответов, когда простой my link выполняет вашу задачу.(Хотя, если это слишком чувствительно для передачи в URL-адресе, оно не должно быть в форме) –

ответ

1

Мой первоначальный ответ полностью промахнулся, но я не могу удалить принятый ответ, поэтому для ясности я меняю этот ответ, чтобы согласиться с комментарием Билли выше.

CFHTTP предназначен для отправки запроса на сервер на другой веб-сайт (как если бы вы сами посещали сайт), обрабатывая результаты этого запроса и сохраняя их в переменной, которые затем могут использоваться вами для выполнения дополнительные задачи против (скажем, разбора домашней страницы сайта для определенных значений).

То, что вы просите, кажется, совершенно не связана часть функциональности, в котором:

  1. У вас есть HTML якорь (гиперссылка) на вашей странице.
  2. Когда пользователь нажимает на эту ссылку, вы хотите передать одну или несколько переменных на новую страницу.

Самый простой способ добиться этого - использовать скрытую форму и передать гиперссылку, затем форму. Это соответствует предложению Билли в комментариях к вашему вопросу:

<form name="myForm" method="post" action="pageToSendVarsTo.cfm"> 
    <input type="hidden" name="username" value="theuser" /> 
    <input type="hidden" name="id" value="42" /> 
</form> 

<a href="#" onClick="document.myForm.submit();">the link to click</a> 

Здесь у вас есть HTML-форма с двумя скрытыми полями, именем и идентификатором, которые не отображают на странице, как они скрыты (но принять к сведению, все равно можно просмотреть, если пользователь просмотрит источник вашей страницы). Затем «ссылка на клик» явно отображается как гиперссылка на пользователя. При нажатии JavaScript используется для имитации запуска подачи формы; он по существу ведет себя так, как будто у формы была кнопка отправки, и пользователь нажал кнопку отправки. Что это означает для формы этого примера, так это то, что и имя пользователя, и значение id затем HTTP POSTed на вашу страницу pageToSendVarsTo.cfm, где они доступны в области FORM для продолжения обработки.

+0

Спасибо за отзыв безопасности (я думаю, это была другая часть моего вопроса!) – redconservatory

+2

Для того, чтобы добраться до этого кода, вам нужно будет сделать GET, которого пыталась избежать @redconservatory. Кроме того, вы делаете 2 вызова на сервере. –

+0

Я неправильно понял вопрос в спешке; вы правы - OP пошел по неправильному маршруту, начиная с cfhttp, в первую очередь, и этот мой ответ указывает на неправильный путь. –

1

Если вы не хотите отправлять переменные обратно в CF для выполнения POST, вы также можете сделать это с помощью некоторой магии JavaScript. Например:

<a class="postLink" href="foo.cfm?var1=a&var2=b">Click Me</a> 

Теперь, говорят, что вы хотите сделать запрос foo.cfm как POST, передавая var1 и var2 как переменные POST (предполагается, JQuery):

<script> 
$(function() { 
    $(document).on('click', 'a.postLink', function (e) { 
    e.preventDefault(); 
    var newForm = $("<form method='POST'></form>"); 

    if ($(this).attr('href').indexOf('?') != -1) 
    { 
     newForm.attr("method", $(this).attr('href').substring(0, $(this).attr('href').indexOf('?'))); 
     var post_args = $(this).attr('href').substring($(this).attr('href').indexOf('?')+1, $(this).attr('href').length).split('&'); 

     for (var i in post_args) 
     { 
     var keyVal = post_args[i].split('='); 
      newForm.append($("<input>", { type: "hidden", name:keyVal[0], value:keyVal[1] })); 
     } 

    } 
    else 
    { 
     newForm.attr("method", $(this).attr('href')); 

    } 
    console.log(newForm); 
    newForm.submit(); 
    }); 
}); 
</script> 

Это остановит нормальную обработку все ссылки, помеченные классом «postLink», и вместо перехода на эту страницу, построят новый объект формы с параметрами, обработанными URL-адресом ссылки, включенным в качестве параметров формы. Затем он отправит эту форму с помощью POST на ту же базовую ссылку, на которую указывает скрипт. Вот рабочая скрипка: http://jsfiddle.net/VGaPH/

Смежные вопросы