Ajax 调用触发错误事件但返回 200 ok
Posted
技术标签:
【中文标题】Ajax 调用触发错误事件但返回 200 ok【英文标题】:Ajax call fires error event but returns 200 ok 【发布时间】:2013-04-20 06:49:50 【问题描述】:$.ajax(
url: 'http://intern-dev01:50231/api/language',
type: 'GET',
dataType: 'json',
success: function()
console.log('It Works!');
,
error: function (request,status, error)
console.log(error);
alert(status);
);
为什么这个 ajax 调用不起作用?如果我在浏览器中调用它可以正常工作:/。
这是提琴手返回的:
HTTP/1.1 200 OK
Content-Length: 122
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 26 Apr 2013 06:56:40 GMT
["LanguageId":1,"LanguageName":"Dansk","LanguageId":2,"LanguageName":"Tysk","LanguageId":3,"LanguageName":"Engelsk"]
【问题讨论】:
Ajax request returns 200 OK, but an error event is fired instead of success的可能重复 【参考方案1】:您必须检查 ajax 响应是否有效。当你在 ajax 中指定时:
dataType: 'json',
如果响应无法解析为 JSON,jQuery 将触发错误事件,即使服务器返回 200 OK。检查从服务器返回的数据,确保它是有效的 JSON(尝试 JSONLint 服务)。
如果返回的数据不是 JSON 或存在语法错误,请在您的服务器端代码中修复它们。您可以从服务器端脚本返回 。
也试试这个。
$.ajax(
url: 'http://intern-dev01:50231/api/language',
type: 'GET',
cache: false,
complete: function (xhr, status)
if (status === 'error' || !xhr.responseText)
console.log(error);
alert(status);
else
console.log('It Works!');.
);
【讨论】:
如果我使用 jsonp 我得到 parseError @user2314110 只需删除 dataType: 'json' 并尝试。请参阅我的编辑答案。 注意:如果响应为空(例如“”),如果dataType设置为json,$.ajax会报错。正如@BharatChodvadiya 所说,如果您删除它应该可以工作的数据类型。【参考方案2】:由于状态显示为 200 OK,因此出现解析错误。问题在于数据类型:json。要对此进行测试,请删除该行,它应该可以工作。为了解决这个问题,您可以将其更改为数据类型:文本。 See this link too for similar question
【讨论】:
这就是我的 Symfony 动态表单触发错误事件的原因,因为 ajax 请求返回我更新表单的 html !!! 我返回的是纯文本而不是 json。【参考方案3】:如果您在本地使用不同的 Web 应用和 Web API 应用进行测试,请调试您的应用并测试 API 正确发送数据,应用通过 AJAX 调用 API 并返回数据。
因为在运行应用程序 AJAX 调用时域不相似,因此未命中成功函数。因为浏览器阻止了Cross Site request
。如果您在 local 和 debug 中发布这两个应用程序,则可以正常工作。
希望这会对某人有所帮助。
【讨论】:
【参考方案4】:检查 url 参数并确保它与加载的页面相同。您可能正在执行跨域 ajax 调用。如果您想进行跨域 ajax 调用,请注意允许进行跨域请求的唯一数据类型是“script”和“jsonp”。
在 URL 是 IP 地址并且页面加载了指向该 ip 的域名的开发环境中遇到了这个问题。
【讨论】:
【参考方案5】:我知道我来晚了,但我遇到了同样的问题,这是 Google 上的热门搜索结果之一。我设法通过在 url 上方移动数据类型来修复它,如下所示:
$.ajax(
type: 'GET',
dataType: 'json',
url: 'http://intern-dev01:50231/api/language',
success: function()
console.log('It Works!');
,
error: function (request,status, error)
console.log(error);
alert(status);
);
【讨论】:
它基本上是一个键值对,因此它的预结构化方式并不重要。如果 dataType 键在其他键之前或之后,我认为构建此请求对象的任何内容都不会查看。它只是构造它。这里的目标是找到真正的原因。以上是关于Ajax 调用触发错误事件但返回 200 ok的主要内容,如果未能解决你的问题,请参考以下文章