2012-01-12 17 views
1

私はcfhttpタグを見ていました。クリックしたリンクから変数を渡すことは可能ですか?cfhttpクリックされたリンクを介してPOST変数を渡す?

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

私は(例えば、ユーザID)リンククリックで変数を渡すためにしようとしていますが、GET経由で送信するために少し不安定なようだ...

+2

CFHTTPを使用する場合、HTTPリクエストはユーザーのブラウザからではなくColdFusionサーバーから取得されることに注意してください。それは違いを生むことができます。 – ale

+0

GETリクエストで変数を見るのが簡単であるという事実以外は、GETによるPOSTに関して本質的により安全なものは何もありません。 –

+1

私はちょっと単純なmy linkがあなたの目標を達成するとき、これらの答えのいくつかによって少し混乱しています。(URLに合格するにはあまりにも敏感であれば、それは形式ではありません) –

答えて

1

私のオリジナルの答えは完全にマークを逃しました、私は受け入れられた答えを削除することはできないので、わかりやすくするために、上記のBillyのコメントに同意するようにこの回答を変更しています。

CFHTTPは、別のWebサイトに(自分がサイトに行ったかのように)サーバー側の要求を作成し、その要求の結果を処理し、変数に格納してから使用することができます(例えば、特定の値のためにウェブサイトのホームページを解析すること)に対する追加のタスク。

何を求めていることはここで、機能性の全く関係のない作品のように見える:

  1. あなたのページにHTMLアンカー(ハイパーリンク)を持っています。
  2. ユーザーがリンクをクリックすると、1つ以上の変数を新しいページに渡します。

これを実現する最も簡単な方法は、隠しフォームを使用し、ハイパーリンク送信フォームを作成することです。これは、あなたの質問のコメントでビリーの提案に一致します。

<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> 

をここで、あなたは彼らが隠されているように、ページ上に表示されない2つの隠しフィールド、ユーザ名とidを持つHTMLフォームを持っている(ただし、注意してください、ユーザーがページのソースを表示しても表示されます)。次に、「クリックするリンク」がユーザーへのハイパーリンクとして表示されます。クリックすると、フォーム提出の発射をシミュレートするためにJavaScriptが使用されます。あたかもフォームに送信ボタンがあり、ユーザーがその送信ボタンをクリックしたかのように動作します。つまり、この例のフォームでは、ユーザ名とIDの両方の値が、 'pageToSendVarsTo.cfm'ページにHTTP POSTされ、FORMスコープで処理が続行できるようになります。

+0

セキュリティチップをありがとう(私はそれが私の質問の他の部分だと思います!) – redconservatory

+2

このコードを取得するには、@redconservatoryが回避しようとしていたGETを実行する必要があります。さらに、サーバー上で2回の通話を行っています。 –

+0

私は急いで質問を誤解しました。あなたは正しい - OPは、まず最初にcfhttpで始まる間違ったルートに行きました。この私の答えは間違った経路を指しています。 –

1

POSTを実行するために変数をCFに送り返す必要がない場合は、JavaScriptマジックでこれを行うこともできます。たとえば:

<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> 

これは、通常の処理を停止します。

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

さて、あなたはPOST変数(想定してjQueryの)としてVAR1とVAR2を渡し、POSTとしてfoo.cfmを要求したいと言います「postLink」クラスでタグ付けされたすべてのリンクは、そのページに行く代わりに、フォームパラメータとして含まれるリンクURLから解析されたパラメータで新しいフォームオブジェクトを構築します。次に、スクリプトが指し示すのと同じベースhrefにPOSTを使用してそのフォームを送信します。 http://jsfiddle.net/VGaPH/

関連する問題