jQuery.ajax返回jsonp而不是json

jQuery.ajax returns jsonp instead of json

本文关键字:json jsonp ajax 返回 jQuery      更新时间:2023-09-26

我有一个简单的ajax调用,如下所示:

$.ajax({
       url: u, type: "POST", dataType: "json",
       data: data,
       success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); }
});

它是tb自动完成的一部分,不能只在一个视图上工作。它不起作用的原因是,它不是json,而是发出jsonp请求(通过嗅探,我看到它用?callback=jQueryxxxxxxxxx调用传递的url),而成功函数从未被调用,因为jquery将其打包到匿名函数中,匿名函数的名称在回调参数中传递,服务器返回标准json(我不想使用jsonp,因为它是POST请求,而不是跨域请求)。我检查过,当前视图url和这个u for ajax url参数都在http://localhost:8080/myapp/areax/...上,所以我不明白jQuery为什么在这里发出JSONP请求。

编辑:

不起作用的视图有url请求,如下所示:http://hostname:8080/AreaName/Report/ViewReportajax的u参数类似于/AreaName/MyAutoComplete/Search,因此自动完成的完整url类似于http://hostname:8080/AreaName/MyAutoComplete/Search?callback=jQuery151013129048690121925_1327065146844

服务器的响应如下:

[{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}]

我知道它不是jsonp,因为它应该是

<script>
 jQuery151013129048690121925_1327065146844([{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}]);
</script>

但我想发出正常的json请求,而不是jsonp。

更新

最奇怪的是(我开始认为这是项目中使用的jQUery v1.5.1中的一个错误),当我删除dataType: "json"时,它会发出一个正常的json请求:)

因此,现在我将接受一个解释,解释为什么它能像预期的那样工作(而dataType:"json"的请求则不然):

$.ajax({
       url: u, type: "POST",
       data: data,
       success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); }
});

从这里的错误:http://bugs.jquery.com/ticket/8118

您可能正在使用jquery验证插件。Jquery验证插件与Jquery 1.5不兼容,冲突导致了您在这里遇到的问题。

如果问题不是由jquery验证插件引起的,请检查是否有任何其他jquery插件可能与jquery 1.5 不兼容