【问题标题】:jQuery.ajax returns jsonp instead of jsonjQuery.ajax 返回 jsonp 而不是 json
【发布时间】: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_Requestsapi.jquery.com/jQuery.ajax,即使您没有指定 dataType:JSON,它也会推断出它的 json ..

标签: javascript jquery json jsonp


【解决方案1】:

来自这里的错误:http://bugs.jquery.com/ticket/8118

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

如果问题不是专门由 jquery-validation 插件引起的,请检查您是否有任何其他可能与 jQuery 1.5 不兼容的 jquery 插件

【讨论】:

  • 是的,这正是我遇到的问题。正如我所怀疑的,这是 jQuery 中的错误 :) 谢谢!
猜你喜欢
  • 2012-12-09
  • 2014-12-16
  • 2017-05-04
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多