我有一个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。
我找不到与此问题相关的现有问题。是什么原因造成的?谢谢!
答案 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 该函数的值。