我正在尝试使用以下函数通过ajax从Web服务获取一些数据, 但是我收到了这条回复信息:
{"readyState":4, "status":200, "statusText":"load"}
WS应该返回一个json数组,如果我查看我的chrome开发工具 在网络标签中 - >响应,我实际上得到了正确的json数组。
问题:
function callWebService(wsUrl, params, successFunction, errorFunction) {
$.ajax({
beforeSend: function (xhr) {
xhr.setRequestHeader('Access-Control-Allow-Methods', ' GET');
xhr.setRequestHeader("Content-Type",
"application/json; charset=utf-8");
xhr.setRequestHeader("Accept", "application/json");
},
type: "GET",
url: wsUrl,
data: params,
dataType: "json",
contentType: "application/json",
success: successFunction,
error: errorFunction
});
}
当我使用此错误函数function(jqXHR, status, error)
*Resource interpreted as Script but transferred with MIME type text/html: "http://www.myweb.it/services/service.php?callback=jQu…y21109160579217132181_1405523828314&codice_istituto=150201&_=1405523828315". jquery.js:8691send jquery.js:8691jQuery.extend.ajax jquery.js:8152callWebService global.js:5(anonymous function) index.js:49jQuery.event.dispatch jquery.js:4409elemData.handle jquery.js:4095
an error occurred: index.js:52
parsererror index.js:53
Error {stack: (...), message: "jQuery21109160579217132181_1405523828314 was not called"}message: "jQuery21109160579217132181_1405523828314 was not called"stack: (...)get stack: function () { [native code] }set stack: function () { [native code] }__proto__: d index.js:54
readyState: 4 index.js:56
jqXHR.status: 200 index.js:57
jqXHR.statusText:load index.js:58
jqXHR.responseText: undefined*
答案 0 :(得分:2)
您发现error
回调已被触发,因为您的AJAX请求出现问题,并且无法成功返回。识别为什么发生这种情况是另一回事。
jQuery传递给error
回调的第一个参数是jqXHR object:
error
Type: Function( jqXHR jqXHR, String textStatus, String errorThrown )
这与success
回调不同,后者以data
返回开头:
success
Type: Function( PlainObject data, String textStatus, jqXHR jqXHR )
jqXHR
是JavaScript返回的xmlHttpRequest
对象的超集。在其中,您会看到readyState
的4,这意味着"完成",而status
的200意味着成功的请求。所以,至少你知道你可能会将你的请求指向正确的URL。
您应该能够从jqXHR
对象获取其他信息,这些信息可能有助于您确定错误原因。来自文档:
为了向后兼容XMLHttpRequest,jqXHR对象将会 公开以下属性和方法:
readyState
status
- 当基础请求分别用xml和/或文本响应时,
statusText
responseXML
和/或responseText
setRequestHeader(name, value)
通过将旧值替换为新值而不是将新值与旧值相连而脱离标准getAllResponseHeaders()
getResponseHeader()
statusCode()
abort()
答案 1 :(得分:0)
你看到的那个对象是XMLHTTPResponse;实际AJAX请求的表示。您将它传递给错误处理程序,因为that's the first argument of jQuery's ajax
error callback。
弄清楚为什么它调用error
回调而不是success
回调更难。那个statusText
表明你的服务器返回了字符串'load' - 这是可能的吗?另一个常见问题是,如果您的数据实际上不是有效的JSON。 JSON非常挑剔;如果你自己制作它,你可能会有无效的空格或错误的引号(或完全缺少引号)。使用JSONLint之类的工具检查您的数据并确保其有效,并确保您的服务器仅 返回JSON - 响应正文中没有其他内容。
答案 2 :(得分:-1)
只是一个解决方法 1.删除dataType:'json' 2.解析json成功函数调用 data = $ .parseJSON(data);