2

これが私のJavaScriptです:

function sendAttack(attacker,defender,hpChange){
    USER_LAST_TIMESTAMP = Math.round(new Date().getTime() / 1000.0);
    var attack = new Attack(TURN_ID,attacker,defender,hpChange);
    attack.action_sequence = ACTION_QUEUE;
    var attackJSON = JSON.stringify(attack);
    jQuery.ajax({
        type: "POST",
        url: urlLeader + "attacks.json",
        data: attackJSON,
        success: function(data){
            ACTION_QUEUE++;
        }
    })  
}

上記の前にsetup.jsロードされた場合:

jQuery.ajaxSetup({
    accepts: 'application/json',
    dataType: 'jsonp'
});

これは、その関数を呼び出したときにサーバーが受け取るものです。

2012-04-26T03:57:44+00:00 app[web.1]: Started GET "/attacks.json?callback=jQuery17103089843031743851_1335412646794&{%22attacker%22:2,%22defender%22:3,%22hp_change%22:6.799999999999997,%22action_sequence%22:0}&_=1335412659141" for 167.206.19.130 at 2012-04-26 03:57:44 +0000

「GET」ではありません。何が起きてる?

4

2 に答える 2

2

おそらく、jquery.com の次のフォーラム投稿で問題が説明されています。

クロスドメイン JSONP リクエストは動的スクリプト タグを使用して作成されるため、GET メソッドのみを使用できます。

于 2012-04-26T08:19:37.530 に答える
0

この jQuery コードのブロックが原因であると思われます。

// Handle cache's special case and global
jQuery.ajaxPrefilter( "script", function( s ) {
    if ( s.cache === undefined ) {
        s.cache = false;
    }
    if ( s.crossDomain ) {
        s.type = "GET";
        s.global = false;
    }
});

つまり、クロスドメイン スクリプト リクエスト (JSONP で使用される) は、そのtype:フィールドを にリセットしGETます。

これは、JSONP がまったく使用せずXMLHTTPRequest<script>タグを偽装し、ブラウザがそのGETリソースを取得するための独自のリクエストを作成するためです。

于 2012-04-26T08:25:45.657 に答える