【问题标题】:How to debug ajax request error?如何调试ajax请求错误?
【发布时间】:2012-12-06 11:43:10
【问题描述】:

我正在尝试获取一个托管在此处的本地服务器中的 JSON,但由于某种原因它不起作用。如果我在浏览器上点击我的 url,它会正确返回 Json,如果我使用另一个 URL,我会得到一些数据。

我原来的getJson方法:

getJson:

$.getJSON(url, 

                    function(data) {
                        console.log('got something'); 
                        alert(data);    

                    });

现在我想看看到底出了什么问题。我已经将它重写为 Ajax 请求,并且在我的错误回调中,jqxhr 给了我很多我不明白的东西。我可以获得有关此错误的更多详细信息吗?

TextStatus 值为"error"

errorThrownnull

    $.ajax({
                  url: url,
                  dataType: 'json',
                  success:  function(data) {
                        console.log('got something'); 
                        alert(data);    
                        },
                error: function(jqxhr,textStatus,errorThrown)
                    {
                        console.log(jqxhr);
                            console.log(textStatus);
                            console.log(errorThrown);                               

                            for (key in jqxhr)
                                alert(key + ":" + jqxhr[key])                                                                 
                            for (key2 in textStatus)
                                alert(key + ":" + textStatus[key])
                            for (key3 in errorThrown)
                                alert(key + ":" + errorThrown[key])

                   //<--- All those logs/alerts, don't say anything helpful, how can I understand what error is going on? ---->

                }});

最后,我应该返回的 json 是

[{"message": "login failed"}]

而且我不能使用 firebug、chrome 控制台或任何其他开发工具,因为这是使用 Phonegap 开发的移动应用程序!

【问题讨论】:

  • 该 URL 是否与您当前的页面在同一个域、子域和协议上?
  • 使用 firebug 或 chrome 的开发者工具,点击网络和 xhr 可以看到来自 url 的响应
  • 您是否使用 Firebug/Fiddler/Chrome 开发工具的“网络”选项卡查看响应代码和文本是什么?
  • URL 位于不同的域中。我无法检查萤火虫,因为我在手机上运行它,它是一个 Phonegap 应用程序。我可能应该在问题中这么说!
  • 似乎它返回的不是有效的 JSON?尝试接受不同的数据类型,看看返回了什么内容?

标签: javascript android jquery ajax cordova


【解决方案1】:

我要将我的 cmets 放入答案表单中,它不是解决您的问题的方法,而是解决 jQuery Ajax 的各种返回问题的好方法。

当您在这种情况下dataType: 'json' 请求特定数据类型时,您正在请求特定类型的数据。如果未返回该特定数据类型,它将传递给错误函数。

如果您的错误消息未提供可以解释您的问题的信息,请尝试请求更友好的数据类型。这样您就可以看到您的请求实际返回的内容。如果它的数据不是您请求的数据类型,那么这是您的问题,您可以从那里解决。

htmltext 这样的数据类型将非常开放,可以为您提供从请求的网址返回的确切数据,您可以从那里解决您的问题。

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    jqxhr - XrayWrapper
    textStatus - 表示 Https 响应状态的文本表示(例如成功、错误)
    errorThrown - XMLHttpRequest

    jqxhr.status - 给出 Http 响应代码,例如 200、404、500 等等..

    使用这段代码sn-p打印json对象中的所有key

    var output = '';
    for (property in object) {
      output += property + ': ' + object[property]+'; ';
    }
    console.log(output);
    

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2011-10-22
      • 2013-09-03
      • 1970-01-01
      • 2012-08-17
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      相关资源
      最近更新 更多