2012-01-20 71 views
6

的我有一个简单的Ajax调用是这样的:jQuery.ajax返回JSONP而不是JSON

$.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和这个u的ajax url参数都在http://localhost:8080/myapp/areax/...,所以我不明白为什么jQuery使得JSONP请求在这里。

编辑:

观上,这并不工作已经URL请求时是这样的: 阿贾克斯的http://hostname:8080/AreaName/Report/ViewReport 和u参数就像/AREANAME/MyAutoComplete /搜索,所以完整的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。

UPDATE

最古怪的所有东西(我开始认为这是其中的项目中使用jQuery的V1.5.1中的错误)是,当我删除dataType: "json",它使一个正常的JSON请求:)

因此,而不是如何让JSON请求,现在我会接受的解释为什么这工作正常(和一个与数据类型:“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} })); } 
}); 
+0

能否请你展示完整的URL包括任何参数? – nnnnnn

+0

当你'u'相对于你当前的域名时,你可以试试吗?例如:/ myapp/areax/... – RvdK

+0

是否是跨域请求?可能是相同的主机,但不同的端口?这是奇怪的家伙... –

回答

2

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

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

如果问题不明确,由于jQuery的验证插件,检查是否有任何其他的jQuery插件,可能不兼容与jQuery 1.5

+0

是的,这是我遇到的确切问题。正如我怀疑,这是在jQuery的错误:)谢谢! –

相关问题