jQuery忽略HTTP请求方法,并附加奇怪的URL参数

时间:2018-07-04 12:45:48

标签: javascript jquery ajax http

我有一个Web服务,期望主体中带有JSON字符串的POST请求。我正在尝试通过jQuery使用此Web服务,但是有两个问题:

1)不管我做什么,jQuery似乎总是使用GET方法;

2)jQuery似乎将奇怪的东西添加到URL中。

我的代码的相关价格:

var WEB_SERVICE_URL = 'http://localhost/XXXX/';

// ...

$.post({
    url: WEB_SERVICE_URL + 'GetConfigLabels/',
    contentType: 'application/json; charset=utf-8',
    dataType: 'jsonp',
    data: JSON.stringify(data),
    processData: false,
    success: function(response) {
        // Whatever
    },
    error: function(xhr, message) {
        // Whatever
    }
});

浏览器(Firefox Quantum 60.0.2)的开发人员工具向我显示了一个奇怪的URL:

http://localhost/XXXX/GetConfigLabels/?callback=jQuery331012146934861340841_1530707758905&{}&_=1530707758906

虽然预期会发生以下情况:

http://localhost/XXXX/GetConfigLabels/

HTML文件也通过文件系统作为文件(使用file:///)打开,因此跨域使用JSONP。

我找不到与此问题相关的现有问题。是什么原因造成的?谢谢!

1 个答案:

答案 0 :(得分:0)

请参阅http://api.jquery.com/jquery.ajax/上的 dataType json 部分:

  

“ json”:将响应评估为JSON并返回JavaScript   宾语。具有回调占位符的跨域“ json”请求,   例如?callback = ?,除非请求,否则使用JSONP执行   在其请求选项中包含jsonp:false。解析JSON数据   严格地任何格式错误的JSON都将被拒绝并且解析错误   被抛出。从jQuery 1.9开始,空响应也被拒绝;的   服务器应返回null或{}的响应。 (请参阅json.org   有关正确的JSON格式的更多信息

使用 jsonpCallback 覆盖回调的随机名称:

  

jsonpCallback类型:String或Function()指定回调函数   JSONP请求的名称。该值将代替   jQuery自动生成的随机名称。最好让   jQuery会生成一个唯一的名称,因为它可以更轻松地管理   请求并提供回调和错误处理。您可能要   当您想要启用更好的浏览器缓存时,请指定回调   GET请求。从jQuery 1.5开始,您还可以为此使用一个函数   设置,在这种情况下,jsonpCallback的值设置为return   该函数的值。