【问题标题】:Ajax call on phonegap not sending requestphonegap上的Ajax调用不发送请求
【发布时间】:2013-01-31 14:57:05
【问题描述】:

我正在把头发拉出来。

我对我的服务器有一个 jquery ajax 调用,该调用在我的浏览器上运行,当我将它连接到我的本地代理进行 http 嗅探时,它在我的设备上运行,但是当它在我的 wifi 或代理上关闭时就挂起蜂窝网络。

我已设置 phonegap config.xml 以允许我的域。该请求是服务器上的获取以及 ajax 调用。你会注意到它是 jsonP。

调用是直接的 jquery,无论如何我都会发布代码。 api 对象是我为保存应用程序功能而制作的自定义对象。

var dfd = $.ajax({
    url: myurl, // I've confirmed the url, but prefer to keep it private
    data: {
        ApplicationID: api.applicationID,
        DeviceID: api.device.uuid(),
        OSVersion: api.device.version(),
        DeviceVersion: api.device.platform(),
        Lat: lat,
        Lng: lng,
        Bearing: bearing
    },
    dataType: "jsonp",
    timeout: 30000
})
.fail(function (event, jqXHR, ajaxSettings, thrownError) {
    console.error(jqXHR);
});

我已经尝试过这个答案,这是我能找到的最接近我的问题的答案,但它似乎不起作用。 Phonegap jQuery ajax request does not work

我有什么遗漏吗?我做错了什么?

编辑: 我忘了说,我在 ajax 调用上设置的超时没有任何作用,它似乎只是忽略了它。

【问题讨论】:

  • 将你的cordova.xml设置为<access origin=".*"/>,然后重试,发布你的结果。
  • 如帖子中所述,访问源已设置为允许该应用程序。
  • 在您的 OQ 中设置了 config.xml,但我说的是 cordova.xml
  • 我一定是错过了您回复中的拼写。我不知道 cordova.xml,或者它甚至是一个选项。它与 config.xml 有何不同?
  • 白名单规则见res/xml/cordova.xml ... from docs.phonegap.com/en/2.0.0/…

标签: javascript jquery cordova


【解决方案1】:

既然拉了一个json字符串,为什么不使用

$.getJSON("http://www.example.com?jsoncallback=?",
    function(data){ ... }

注意 jsoncallback。这里发生的是 jquery 将一个额外的参数解析到代码中以验证结果是否来自实际请求。这发生在跨域请求上。

为了让你的 'json-builder' 兼容,简单地将 jsoncallback 放在请求的前面:

$return =  $_GET["jsoncallback"].'({"title" : "test", "author" : "someone"});

【讨论】:

  • getJson 只是在底层使用 $.ajax。没有明显的区别。实时服务器在浏览器上或通过代理时可以很好地读取呼叫,所以我知道这不是呼叫在服务器上的格式。此错误仅在手机单独使用且只有 wifi 或手机连接时才会出现。
  • 我知道它是一样的(虽然不确定 $.ajax 是否有 jsoncallback)。如果您的科尔多瓦访问 http:// 它应该可以工作,但是当您从手机 (assets/www) 运行 javascript 时,它在另一个域上,您需要提供回调。
【解决方案2】:

正如您所提到的,您的问题可能不是跨域的。您的服务器是否记录任何请求?从 index.html 链接第二个(相同的)请求后,我遇到了类似的问题,第一个请求工作正常。我发现了一个信息,它可能是一个 phonegap 错误。

【讨论】:

  • 是的,我的服务器会记录请求。这就是我知道它根本不会访问我的服务器的方式。不幸的是,我的要求都没有奏效。到目前为止,我还没有在 android 上测试过,只在 ios 上测试过。
【解决方案3】:

事实证明我的问题完全不同。由于移动浏览器如何添加 AMD 脚本,我的依赖项没有加载。我已通过将所有脚本合并到一个文件中来解决此问题,并且从那时起它就一直有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 2012-12-04
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多