【问题标题】:jQuery service response showing in firebug but not getting in successjQuery 服务响应在 firebug 中显示但未成功
【发布时间】:2013-06-04 17:56:20
【问题描述】:

我在使用它运行的浏览器访问服务 url 并在浏览器上显示 json 结果时遇到问题。

  /*-secure-{"statusCode":200,"errors":
  ],"isSuccessful":true,"statusReason":"OK","Envelope":
 {"Body":{"GetStoresByZipcodeResponseElement":
 {"ns1":"http:\/\/abc.com\/intg\/ws\/\/provider","status":"statusCode":"000","statusDescription":"Success"}}*/"

但是当我使用 jquery 访问该网址时:

 $.ajax({
        url: url,
        cache: true,
        dataType: 'script',
        type: 'GET',
        async: false, // must be set to false
        success: function (data, success) {
           console.log(" success "+ JSON.stringify(success));
           console.log(" data " +JSON.stringify(data));
        },
        error :function( jqxhr, textStatus, error ) { 
        var err = textStatus + ', ' + error;
        console.log( "Request Failed: " + err);
        },

        complete: function (jqxhr, textStatus ){
        console.log( "complete: " + JSON.stringify(jqxhr)+" "+ textStatus );
        }
    });

它向我展示了 firebug 中的响应,但即使它涉及 ajax 成功功能,并且对于数据它说未定义。

用“json”更改“脚本”后返回:

Request Failed: error,
complete: {"readyState":0,"responseText":"","responseJSON":null,"status":0,"statusText":"error"} error

Firebug 中的 JSON 响应和响应选项卡视图

任何帮助将不胜感激。

【问题讨论】:

  • 尝试使用dataType "json" 而不是"script" 并使用complete 和/或error 回调来调试问题。
  • @Stefan 我在帖子中编辑了我的代码。添加完成并出错后,它在控制台上返回此输出,并带有'script' dataType "success "success" data undefined complete: {"readyState":4,"status":200,"statusText":"success"} success"跨度>

标签: jquery ajax json


【解决方案1】:

试试这些回调函数,找出什么是“数据”。

success: function(data, success) {
  console.log("success", arguments);
  console.log("data", typeof data, data); // Verify the response
},
error: function(jqxhr, textStatus, error) { 
  console.log("error", arguments);
},
complete: function(jqxhr, textStatus) {
  console.log("complete", arguments);
}

另外,为什么不在调试时禁用缓存? cache: false.

您似乎正在尝试请求一些 secured JSON 数据,因为响应不是有效的 JSON,这可能是 jQuery 无法解析它的原因。

如有必要,可以编写自定义dataFilter 来修剪和解析响应。

dataFilter: function(data, type) {

  if (type === 'json') {
    // TODO: Parse the custom format by removing the comments
    // and then parsing what is expected to be valid JSON.
    return $.parseJSON(data);
  }

  return data;
}

更新

您正在尝试进行跨域请求并且应该使用JSONP,如果服务提供商支持它,因为您受到Same Origin Policy 的限制。

【讨论】:

  • 感谢您的帮助,但仍然面临发现 typeof 是 dataFilter 中的数据的问题,它仍然向我显示未定义并且类型显示脚本。
  • 数据既不是有效的脚本也不是 JSON。你想从哪里获取它?
  • 感谢 Stefan 您的回复,知道需要在服务器端解决这个跨域问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
相关资源
最近更新 更多