2009-08-28 10 views
8

まず私のコード

$.getJSON("./posts/vote/" + postId + "/1", null, function(result) { 
    if (result.result == true) 
     $("#pst" + postId + " > .pstside > .rank > .score").html(result.voteCount); 
}); 

に到達していない私は、ボタンASP.Net MVCコントローラのアクションからいくつかの投票結果をもたらすコードを持つ各の束を持っています。

これはよくボタンがクリックされた最初の時間を動作しますが、それを再度クリックすると何も起こりません。サーバーに到達するものはありません。

私は、Firefoxでテストしています。

何が問題になりますか?奇妙なキャッシングのようなもの?リクエストが二度目に私のコントローラに到達したことがないので、javascriptのは大丈夫実行するようだが、古い値を返す続けます。

+0

あなたはfirebug - > netをチェックしましたか?リクエストがサーバーに送信され、応答が得られたかどうかを確認できます。 –

答えて

18

ブラウザのキャッシュの問題のような音がする場合は、scriptの場合はデフォルトでfalseであるため、$.ajaxを使用してcacheオプションをfalseに設定するとよいでしょう。そしてjsonp

$.ajax({ 
    type: "GET", 
    url: "./posts/vote/" + postId + "/1", 
    success: function (result) { 
    if (result.result == true) 
     $("#pst" + postId + " > .pstside > .rank > .score").html(result.voteCount); 
    }, 
    dataType: "json", 
    cache: false 
}); 

それとも、$ .getJSONを使用する前に、$.ajaxSetupを使用して、すべてのjQueryのAjax機能のために、世界的にそのオプションを設定できます

$.ajaxSetup({ cache: false }); 

編集:あなたはこのようにJSONを返すPOSTリクエストを行うことができます。

$.post("./posts/vote/" + postId + "/1", 
    function (result) { 
    if (result.result == true) 
     $("#pst" + postId + " > .pstside > .rank > .score").html(result.voteCount); 
    }, "json"); 

あなたはpostJSON要求の多くを行うことを計画している場合は、あなたがあなた自身の機能を行うことができます。

jQuery.postJSON = function(url, data, callback) { 
    jQuery.post(url, data, callback, "json") ; 
}; 

そして、 $ .getJSONと同じように使うことができます

+0

実際には、Firefox 3.5で起こっています。 $ .ajaxSetup({cache:false});それを解決しました。私はキャッシュを追加しました:リクエストの最後には真ですが、これはPOSTリクエストを送信することに本当に関心があります。 –

2

「GET」を行っているので、(ブラウザ、プロキシ/仲介者、またはサーバーで)キャッシュが問題になることは不合理ではありません。データを変更している場合( "古い値を返す")、おそらく "POST"を試してみてください。または、クエリにランダムな要素を導入します。

+0

妥当なアイデアのように思えますが、jquery getjsonを使って投稿を行う方法を確認してください。 –

+0

$ .postをうまく使うことができました。 –

0

GETリクエストでも同じことができます。リクエストの最後にタイムスタンプを追加するだけです。例えば、以下のサンプルリクエストを参照してください。

http://www.abc.com/api/v1/votes?user=123&tag=jQuery&_timestamp = 1234421352

この方法で、ブラウザは、URLがすべての呼び出しに変更され、これまでのように、あなたの要求をキャッシュしません。 Javascriptからタイムスタンプを簡単に取得できます。また、あなたは、サーバー側でこのタイムスタンプを処理する必要はありませんが、それはあなたの裁量件までです。

+0

これは実用的ですが、実用的ではありません。私はPOST要求を行うことが最も合理的な考えだと思いますが、何らかの理由でPOSTが利用できないシナリオでは、あなたの方法やCMSの方法を使用することができます。ありがとう –

2

はい、$.ajaxSetup({ cache: false });は問題を解決します。私のアプリケーションはMVC 2です。コードは以下の通りです:

<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     $.ajaxSetup({ cache: false }); 

     $('#btnApplyForm').click(function() { 
      $("#applyForm").html("Loading..."); 
      $("#divApplyForm").dialog("open"); 
      var id = $('#applyFormID').attr("value"); 
      $.get('<%= Url.Content("~/Applying/FillApplyForm/") %>' + id, 
        function (response) { $("#intakeForm").html(response); } 
      ); 
      return false; 
     }); 

     $("#divApplyForm").dialog({ 
      title: "Application Form", 
      autoOpen: false, 
      bgiframe: true, 
      modal: true, 
      width: 600, 
      height: 540 
     }); 
    }); 
</script> 
+0

関連する問題