windows phone 7 - phonegap 停止 jquery.ajax

Posted

技术标签:

【中文标题】windows phone 7 - phonegap 停止 jquery.ajax【英文标题】:windows phone 7 - phonegap stops jquery.ajax 【发布时间】:2013-07-21 19:34:59 【问题描述】:

这是我在这里的第一个问题,如果我违反了一些规则,很抱歉。我知道这似乎是重复的,但我在这里和网上找到的每个答案都没有给我任何结果。

我正在为 iosandroid 和 Windows Phone 开发一个多平台、多页面、基于 SOAP-XML Web 服务的应用程序。 iOS 和 Android 一切正常,但是在移植到 Windows Phone 7/8 时,我遇到了这个讨厌的问题:对 jQuery.ajax(内部和外部)和衍生工具($.load、$.get)的任何调用都开始了,但显然永远不会收到答案。

目前我正在使用 jQuery 2.0.2、Cordova 2.5.0 和 Weinre 进行调试。我切断了 jQuery mobile,因为它生成的代码很复杂(所以没有使用 $.mobile.allowCrossDomainPages)。

这是我的一个内部 ajax 导航调用代码

$("#base_page").load(
    thePage,
    function () 
        console.log("------------ loadPage: ", thePage, " loaded");
        $(document).trigger("pageload", [thePage]);
    
);

这根本没有给我答案。

这是一个用于 WS 数据挖掘的外部 ajax 调用的代码

$.ajax(
    url: soapURL,
    type: "POST",
    dataType: "xml",
    data: createSOAPRequest(soapWS, soapParams),
    contentType: "text/xml; charset='utf-8'",
    beforeSend: function(xhr) 
        console.log("•••••••••••••• ready to send ajax");
        xhr.setRequestHeader('SOAPAction', soapURL);
    ,
    error: function(jqXHR, textStatus, errorThrown) 
        console.log("•••••••••••••• error");
        navigator.notification.alert(textStatus + "\n" + errorThrown);
    ,
    success: function(theXML) 
        console.log("•••••••••••••• success");
        console.log(theXML);
        // .......... building-page code
    
);

这会在控制台中写入“••••••••••••• 准备发送 ajax”,然后仅此而已。

我想我已经尝试了所有可以在这里和网络上的其他来源找到的东西。如果我没有错过什么,我尝试了

$.support.cors = true 从here 或here cache: false, crossDomain: true, xhrFields: withCredentials: true的任意组合 从here 停用 Cordova 代码的 win.XMLHttpRequest 部分 每个本地 url 描述,绝对或相对,简单(仅页面)或完整路径(以 /www 或 /app/www 甚至完整的傻瓜 MS 协议开头) URI 在 config.xml 中被列入白名单

但无济于事。 JSONP 不是一个选项,因为服务器会使用回调值触发错误。

问题是我从未收到任何错误/成功消息(因此它与this 不同),就好像没有数据来自 WebService。在其他操作系统中,一切都像魅力一样工作,所以我确信 WebService 调用是正确的。

作为一个绝望的解决方案,我已经设法通过 XMLHttpRequest 对象重写了内部调用,这部分现在可以了。但在重写对 WebService 的更复杂的 POST 调用之前,我想知道是否有任何方法可以恢复(更简单且已经工作的)jQuery.ajax 功能。

【问题讨论】:

【参考方案1】:

您的跨域请求选项是 JSONP、CORS(通过服务器端“Access-Control-Allow-Origin: *”标头或通过cordova 的本机 http 请求。前两个选项要求服务器愿意与您的应用。

【讨论】:

以上是关于windows phone 7 - phonegap 停止 jquery.ajax的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 7检测当前主题

Windows Phone 7 中的推送通知问题

Windows Phone 7入门[关闭]

下拉列表 Windows Phone 7

Windows Phone 7 下 Socket(TCP) 与 PC 通讯

保存 xml 文件 Windows phone 7