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

不是“获取”。这里发生了什么?

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