jquery - Windows Phone 7 - PhoneGap 停止 jquery.ajax

标签 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 从 here 开始或here
  • 缓存:false、crossDomain:true、xhrFields:{withCredentials:true}的任意组合
  • 停用 Cordova 代码的 win.XMLHttpRequest 部分,从 here 开始
  • 每个本地 URL 描述,绝对或相对,简单(仅页面)或完整路径(以/www 或/app/www 甚至完整的傻瓜 MS 协议(protocol)开头)
  • URI 在 config.xml 中列入白名单

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

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

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

最佳答案

跨域请求的选项是 JSONP、CORS(通过服务器端“Access-Control-Allow-Origin: *” header ,或通过 cordova 的 native http 请求。第一个有两个选项要求服务器愿意与您的应用程序合作。

关于jquery - Windows Phone 7 - PhoneGap 停止 jquery.ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17798214/

相关文章:

javascript - 导航菜单 JQuery 问题

javascript - 如何在 jQuery 中形式化/组织大量的 eventHandler?

javascript - 根据缩放级别显示或隐藏 SVG 元素

php - JQuery 数据表错误 "Cannot read property ' 长度'未定义”

silverlight - 从 DataTemplate 中的 DataTemplate 中引用 ViewModel DataContext

video - 如何在 Windows Phone 7 上将屏幕录制为视频?

php - 基于 html、css、jquery 的拖放、调整大小、旋转应用程序 : export final image to jpg via php

jquery - Ajax 请求只能运行一次

javascript - AJAX - 另一个函数可以在成功的过程中执行吗?

windows-phone-7 - WP7如何在TombStoning期间存储LiveConnectSession?