【发布时间】:2012-02-15 00:59:33
【问题描述】:
我有一个像这样的简单 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),并且从不调用成功函数,因为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} })); }
});
【问题讨论】:
-
你能显示完整的网址,包括任何参数吗?
-
您能否尝试一下“u”何时与您当前的域相关。例如:/myapp/areax/...
-
是跨域请求吗?可能是同一主机但端口不同?很奇怪的家伙...
-
我在编辑中添加了更多信息。
-
你确定它不适用于 dataType:json。根据文档docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests 和api.jquery.com/jQuery.ajax,即使您没有指定 dataType:JSON,它也会推断出它的 json ..
标签: javascript jquery json jsonp