jQuery.ajax返回jsonp而不是json

6

我有一个简单的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请求(通过嗅探发现调用传递的url时会带上?callback=jQueryxxxxxxxxx),成功函数从未被调用,因为jquery将其封装到匿名函数中,并将函数名作为回调参数传递,而服务器返回标准的json(我不想使用jsonp,因为它是POST请求而不是跨域请求)。我检查了当前视图的url和ajax url参数的 u ,这两个都在http://localhost:8080/myapp/areax/...上,所以我不明白为什么jQuery在这里进行JSONP请求。

编辑:

无法正常工作的视图的url请求如下: http://hostname:8080/AreaName/Report/ViewReport ajax的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} })); }
});

请问您能否展示完整的URL,包括任何参数? - nnnnnn
你能试试看当'u'相对于你当前的域时会怎样吗?例如:/myapp/areax/... - RvdK
我已在编辑中添加了更多信息。 - Goran Obradovic
你确定它不适用于dataType:json吗?根据文档http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests和http://api.jquery.com/jQuery.ajax/,即使您没有指定dataType:JSON,它也会推断出它是json。 - Nakul
是的,Nakul,我很确定,那就是为什么我写我认为这是一个bug。而且@ustun,这并不是服务器的问题,如果你读了我的问题,你会发现jQuery发出了一个JSONP请求,并期望结果调用回调函数。这就是问题所在,一旦发送了jsonp请求,来自服务器的结果就无关紧要了,除非是jsonp结果,但它不是我想要的。 - Goran Obradovic
显示剩余2条评论
1个回答

2

从这里的错误信息可以看出:http://bugs.jquery.com/ticket/8118

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

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


是的,这正是我遇到的问题。正如我所怀疑的那样,这是jQuery中的一个bug :) 谢谢! - Goran Obradovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接