的我有一个简单的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} })); }
});
能否请你展示完整的URL包括任何参数? – nnnnnn
当你'u'相对于你当前的域名时,你可以试试吗?例如:/ myapp/areax/... – RvdK
是否是跨域请求?可能是相同的主机,但不同的端口?这是奇怪的家伙... –