【问题标题】:Phonegap jQuery ajax request does not workPhonegap jQuery ajax 请求不起作用
【发布时间】:2012-01-19 10:28:01
【问题描述】:

我想开发一个 Phonegap 应用程序,我正在使用 jQuery Mobile。我在 PC 上通过 Firefox 进行开发和测试,所以这里描述的问题与 Phonegap 没有任何关系 - 这是一个 Firefox PC 问题:

以下代码不起作用,我需要一些帮助来为我指明正确的方向:

var loadWeather = function()
{
    // Request absetzen
    $.ajax(
    {
        // the URL for the request
        url : 'http://www.google.com/ig/api',

        // the data to send (will be converted to a query string)
        data : {
            weather : 'Vienna'
        },

        // whether this is a POST or GET request
        type : 'GET',

        // the type of data we expect back
        dataType : 'xml',

        // code to run if the request succeeds; the response is passed to the function
        success : function(xml)
        {
            parseXML(xml);
        },

        // code to run if the request fails;
        // the raw request and status codes are passed to the function
        error : function(xhr, status)
        {
            alert('Error retreiving weather!');
        }
    });
}

状态是“错误”,xhr.readyState=0,xhr.status=0,所以我根本没有从 jQuery 那里得到任何信息。请求被执行,answer-header(来自 Firebug)是:

Accept: application/xml, text/xml, */*; q=0.01
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Connection: keep-alive
Host: www.google.com
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1

和 200 确定。那么为什么我要跳入错误案例呢? xhr.isRejected() 说的是真的。这是什么意思?

【问题讨论】:

  • 在 XML 上尝试 JSONP
  • 由于跨域来源限制,您将无法测试它(使用真实请求,没有一些代理脚本)。这个 API 似乎不支持 JSONP。但它可以在设备上的 Phonegap 内部工作,因为没有跨域限制。
  • @dfsg:如果您的评论是一个答案,我会选择它。谢谢!

标签: jquery cordova


【解决方案1】:

好的,这里发生了很多事情。首先 Firefox 不允许您使用 AJAX 进行跨域请求,因此当您从桌面浏览器尝试时会收到错误案例。

如果您在设备上进行测试,我怀疑 jQuery 会给您一个成功的结果。在移动设备上运行来自 file:// 协议的代码时,您会看到同源策略不适用。事实上,我已经在使用 PhoneGap 开发的示例应用程序中对那个确切的 Google API 进行了 AJAX 查询。

但是,根据您使用的 jQuery 版本,可能存在错误。通常,当您从 file:// 协议执行 AJAX 请求时,返回的 xhr.status 将为“0”。这实际上没问题,应该被视为“200”,但我相信旧版本的 jQuery 存在 0 状态的问题。

我写了一篇关于从 PhoneGap 应用程序执行 XHR 的快速博客文章,您可以阅读:

http://simonmacdonald.blogspot.com/2011/12/on-third-day-of-phonegapping-getting.html

它完全排除了 jQuery。如果这不起作用,那么什么都不会。

【讨论】:

  • 但是当我做 Firefox 测试时,我也使用 file:// 协议,所以我希望 Firefox 会允许我执行请求。我还在 Firebug 网络页面上看到了请求。
  • 但你是对的。它适用于设备上的 Phongap,这很重要。所以我无法在 Firefox 或 Chrome 上测试/调试,但必须在无法调试的设备上运行它。
  • 更正移动浏览器在 AJAX 方面的工作方式与桌面浏览器不同。您可以在此处阅读有关如何在 Firefox 中执行跨域 ajax 的信息:developer.mozilla.org/en/HTTP_access_control。可以使用 debug.phonegap.com 在设备或模拟器上进行调试。
猜你喜欢
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多