windows phone 7 - phonegap停止jquery.ajax

时间:2013-07-22 22:01:38

标签: jquery ajax windows-phone-7 cordova cors

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

我正在开发适用于iOS,Android和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 herehere
  • cache的任意组合:false,crossDomain:true,xhrFields:{withCredentials:true}
  • 停用来自here
  • 的Cordova代码的win.XMLHttpRequest部分
  • 每个本地网址描述,绝对或相对,简单(仅限页面)或完整路径(以/ www或/ app / www开头,甚至是完整的傻瓜MS协议)
  • URI在config.xml
  • 中列入白名单

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

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

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

1 个答案:

答案 0 :(得分:0)

您的跨域请求选项是JSONP,CORS(通过服务器端" Access-Control-Allow-Origin: *"标头,或通过cordova的本机http请求。前两个选项要求服务器愿意为你的应用程序打球。