【问题标题】:JQuery Mobile + Phonegap : $.ajax calls not workingJQuery Mobile + Phonegap:$.ajax 调用不起作用
【发布时间】:2012-03-19 07:25:35
【问题描述】:

我一直在寻找解决方案,但一路失败。以下代码在 JQuery 1.4.4、JQuery Mobile 1.0a2 和 PhoneGap 0.9 下运行良好。但是,当我将它转移到 JQuery 1.7.1、JQuery Mobile 1.1.0 和 PhoneGap 1.5 时;它不断陷入错误。我通过 Fiddler 跟踪了 http 调用,并意识到 ajax 确实调用了 URL,但为什么它会出错而不是成功?请帮忙!

$.ajax({
type: "GET",
cache: false,
url: updateServer+'update.xml',
dataType: "xml",
error: function(xhr, settings, exception){
    alert('The update server could not be contacted.');
},
success: function(xml){
    // success code     
    }
});

【问题讨论】:

  • 哪个平台?如果您在浏览器中尝试该应用程序,它会起作用吗?
  • 嗨,它在浏览器和模拟器中都不起作用。对于浏览器,我在 Firefox、IE 和 Chrome 上进行了测试。他们不工作:(
  • 那么这不是电话间隙问题..首先让它在普通浏览器中工作..试试这个freelancephp.net/simpleajax-small-ajax-javascript-object而不是jquery ajax
  • hmm,我认为它无法请求跨域url,可以通过“../test.xml”访问的本地文件工作正常。正在调用和加载跨域url,只是ajax无法捕获它。

标签: javascript jquery ajax cordova mobile


【解决方案1】:

确保您可以从模拟器本身访问网络服务并允许应用程序访问互联网连接。

为此,请在模拟器中打开默认浏览器并输入 URL。它不应该给你一个 404 或任何异常。

【讨论】:

  • 嗨 Martin,是的,该 URL 可从浏览器和模拟器访问。您知道为什么 ajax 仍然无法正常工作吗?
  • 应用程序是否允许访问网络/互联网?在 android 中,您需要将其包含在 Manifest 中。
  • 是的,我已将其包括在内。事实上,整个代码在带有 JQuery Mobile 1.02a 的 JQuery 1.4.4 下运行得很好,只要它现在在带有 JQuery Mobile 1.1.0 的 JQuery 1.7.1 中运行,它就无法按预期工作
【解决方案2】:

我在使用 Phonegap 1.5 时遇到了这个问题。降级到 Phonegap 1.4.1 解决了这个问题。我连续几天感到沮丧,无法理解这个问题。

【讨论】:

  • 是的!感谢您的评论,我通过从 1.5 升级到 1.7 解决了我的问题
【解决方案3】:

jQuery Mobile 在有关使用PhoneGap 实现的文档中有一整页。在这里查看。

http://jquerymobile.com/test/docs/pages/phonegap.html

您必须设置权限以允许跨域 ajax 调用。

还有!如果您从 Web 应用程序移植过来,请记住更改 html 文件中的代码。您很可能对 url "../api/handler.php" 或其他东西进行了调用。您需要将所有这些呼叫设为绝对可在 PhoneGap 中使用。 "http://mydomain.com/api/handler.php"

【解决方案4】:

好的,我认为问题实际上是 URL 本身。 URL 地址是有效的,因为它是可访问的,但它不属于同一个域。例如,我的带有 JQuery 的 html 文件位于 http://www.yahoo.com/index.html,但我试图调用的 URL 是 http://www.google.com

由于安全问题,浏览器会阻止从托管在一个域上的页面向托管在不同域(同源策略)上的页面进行 ajax 调用。我的解决方案是使用 php 文件从另一个域中检索相关数据,而 html(使用 JQuery)正在调用 php 文件,如下所示:

$.ajax({
type: "GET",
cache: false,
url: 'getcontent.xml',
dataType: "xml",
error: function(xhr, settings, exception){
    alert('The update server could not be contacted.');
},
success: function(xml){
    // success code     
    }
});

感谢您提供的所有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多