我有一个简单的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} })); }
});