通过ajax调用Web服务 - 在我的错误回调中正确响应

时间:2014-07-16 12:49:59

标签: javascript jquery ajax json

我正在尝试使用以下函数通过ajax从Web服务获取一些数据, 但是我收到了这条回复信息:

{"readyState":4, "status":200, "statusText":"load"} 

WS应该返回一个json数组,如果我查看我的chrome开发工具 在网络标签中 - >响应,我实际上得到了正确的json数组。

问题:

  1. 为什么我在errorFunction回调中得到结果?
  2. 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)

    时,这是我的console.log
    *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* 
    

3 个答案:

答案 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
  •   
  • statusText
  •   当基础请求分别用xml和/或文本响应时,
  • 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);