Javascript Ajax调用触发错误事件,但返回200 ok
为什么这个ajax调用不起作用??如果我调用浏览器,它可以正常工作:/ 这就是fiddler返回的结果:Javascript Ajax调用触发错误事件,但返回200 ok,javascript,json,api,jquery,Javascript,Json,Api,Jquery,为什么这个ajax调用不起作用??如果我调用浏览器,它可以正常工作:/ 这就是fiddler返回的结果: $.ajax({ url: 'http://intern-dev01:50231/api/language', type: 'GET', dataType: 'json', success: function() { console.log('It Works!'); },
$.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响应是否有效。在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"}]
如果响应不能解析为JSON,即使服务器返回200 OK,jQuery也会触发错误事件。检查从服务器返回的数据,确保它是有效的JSON(请尝试JSONLint服务)
如果返回的数据不是JSON或有语法错误,请在服务器端代码中修复它们。您可以从服务器端脚本返回{}
也试试这个
dataType: 'json',
由于状态显示为200 OK,因此存在分析错误。问题在于数据类型:json。要测试这一点,请拆下线路,它应该可以工作。为了解决这个问题,您可以将其更改为数据类型:text 我知道我有点晚了,但我也遇到了同样的问题,这是谷歌最热门的搜索结果之一。我通过将数据类型移动到url上方来修复它,如下所示:
$.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!');.
}
}
});
如果您正在使用不同的web应用程序和web API应用程序进行本地测试,则调试您的应用程序并测试API通过AJAX向API正确发送数据和应用程序调用并返回数据 因为域在运行应用程序时是不相似的,所以AJAX调用不会命中成功函数。因为浏览器阻止
跨站点请求
。如果您在本地和调试中发布这两个应用程序,则工作正常
希望这对其他人有所帮助。检查url参数,确保其与加载的页面相同。您可能正在进行跨域ajax调用。如果您想要进行跨域ajax调用,请注意,允许进行跨域请求的唯一数据类型是“script”和“jsonp”
在开发环境中遇到此问题,URL是IP地址,页面加载了指向该IP的域名。如果使用jsonp,我会得到parseError@user2314110只需删除数据类型:“json”并重试。请参阅我的编辑答案。注意:如果响应为空(例如“”)$。如果数据类型设置为json,ajax将报告错误。正如@BharatChodvadiya所说,如果删除数据类型,它应该可以工作。它基本上是一个键值对,因此它的预结构方式并不重要。我不认为构建这个请求对象的任何东西都会考虑数据类型键是在其他键之前还是之后。它只是构造它。这里的目标是找到真正的原因。这就是为什么我的Symfony动态表单会触发错误事件,因为ajax请求会返回更新表单的html!!!我返回的是纯文本而不是json
$.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);
}
});