jQuery.ajax返回jsonp而不是json

时间:2012-01-20 12:55:10

标签: javascript jquery json jsonp

我有一个简单的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),并且永远不会调用success函数,因为jquery将它打包到匿名函数中,其名称是传递回调参数,服务器返回标准json(我不想使用jsonp,因为它是POST请求而不是跨域请求)。我查了一下,当前的查看网址和这个u的ajax url参数都在http://localhost:8080/myapp/areax/...上,所以我不明白为什么jQuery会在这里发出JSONP请求。

修改

查看这个不起作用的url请求是这样的: http://hostname:8080/AreaName/Report/ViewReport 和你的ajax参数就像 / AreaName / MyAutoComplete / Search ,所以自动完成的完整网址就像 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请求:)

所以,不是如何制作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} })); }
});

1 个答案:

答案 0 :(得分:2)

来自此处的错误:http://bugs.jquery.com/ticket/8118

您可能正在使用jquery-validation插件。 Jquery-validation插件与jQuery 1.5不兼容,并且冲突会导致您遇到此类问题。

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