【问题标题】:Using jQuery to send a POST; server thinks GET使用 jQuery 发送 POST;服务器认为 GET
【发布时间】:2012-04-26 04:10:32
【问题描述】:

这是我的 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

不是“获取”。这是怎么回事?

【问题讨论】:

  • 首先,您是否尝试过在帖子中使用不同的数据?硬编码一个值,例如 data: "test=ing" 或 data: { test: 'ing'}。其次,您是否使用 json2.js 为本身不支持它的浏览器启用“JSON.stringify”? (见stackoverflow.com/questions/1480393/…
  • 您在请求中省略了dataType 参数; jQuery 可能会为你改变你的请求类型。
  • dataType 用于返回值。如果指定“contentType”来影响向服务器发送数据,则更有可能。您是否在任何地方更改 jQuery AJAX 默认值?
  • 您似乎正在向服务器发送 JSON,在这种情况下,您需要将 processData 设置为 false 并设置适当的 Content-Type 否则 JQuery 会尝试将数据转换为 application/x-www-form- urlencoded MIME 类型。
  • 默认类型是“GET”。尝试用分号 (;) 完成 jQuery.ajax 函数,然后检查一次。浏览器的语法可能有问题。

标签: jquery ajax post get


【解决方案1】:

也许this forum post at jquery.com 描述了您的问题:

跨域JSONP请求是使用动态脚本标签创建的,所以只能使用GET方式。

【讨论】:

    【解决方案2】:

    我怀疑这块 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 请求来检索该资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-29
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多