【问题标题】:$.Ajax in jQM mobile app with phonegap is not working on iOS devices带有 phonegap 的 jQM 移动应用程序中的 $.Ajax 在 iOS 设备上不起作用
【发布时间】:2015-07-10 03:51:45
【问题描述】:

我在 jQuery Mobile 应用程序中有一个登录按钮。当按下登录按钮时,将使用 $.ajax() 方法调用一个肥皂服务。这适用于浏览器和安卓手机,但控件甚至不进入 iOS 设备中的 $.ajax() 内部。这是我的示例代码。

var User = $("#txtUsername").val();
var Psw = $("#txtPwd").val();
var soapMessage = '<?xml version="1.0" encoding="utf-8"?>'
                    + '<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><ns0:UserLogin SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="urn:LoginSrvcVi"><userId xsi:type="xsd:string">'+User+'</userId><password xsi:type="xsd:string">'+Psw+'</password></ns0:UserLogin></SOAP-ENV:Body></SOAP-ENV:Envelope>';

$.ajax({
        url : myLoginUrl,
        type : "POST",
        username : User,
        password : Psw,
        dataType : "xml",
        data : soapMessage,
        contentType : "text/xml; charset=\"utf-8\"",

        success : function(data, textStatus, jqXHR) {
            debugger;
            $.mobile.loading('hide');
            console.log("data" + data);
            var x2js = new X2JS();
            var test = x2js.xml2json(data);                                                     
            debugger;
            if (test.Envelope.Body.searchUserLoginResponse.Response.messages.item != "Data Retrived Successfully") 
            {
                alert("Success");
            }
        },

        error : function(jqxhr) 
        {
            alert("Error");
        }

    });

注意:我尝试在 safari 中运行 SOAP url,但它只显示一个空白屏幕,没有数据。 android上的chrome显示XML结构。

需要帮助。 谢谢

【问题讨论】:

  • alert("Success"); 你错过了} 关闭if 块。
  • @Jai 这是一个复制粘贴错误,并且 if 在我的代码中已关闭。谢谢。
  • 你能检查你的控制台你得到了什么错误信息吗?
  • 我在浏览器或安卓手机上没有收到此错误。我仅在 iOS 设备上收到此错误。我试图给超时 50000 毫秒,然后它进入超时错误。当我尝试 async : false 时,它​​给了我未经授权的错误。
  • @abhhab 尝试将xhrFields 属性xhrFields: { withCredentials: true } 添加到$.ajaxSettings?,可能是crossDomain: true? ;见stackoverflow.com/questions/16689496/…

标签: jquery ajax cordova jquery-mobile hybrid-mobile-app


【解决方案1】:

尝试将所有代码包装在“document.ready”事件回调中,如下所示:

$(document).ready(function () {
   // Your code here
});

【讨论】:

    【解决方案2】:

    如果您的请求在 Android 和桌面浏览器上正常运行,但在 iOS 上却不能正常运行,那么听起来您的应用的 CORS 的 iOS 配置中可能存在错误。鉴于您提到在尝试使用 async: false 拨打电话时遇到“未经授权的错误”,看来您的域白名单配置可能是问题的根源。

    确保您已将域添加到 AppName/config.xml 文件(适用于 iOS)以及 res/xml/config.xml 文件(适用于 Android)。请务必查看documentation,了解有关如何添加正确配置的更多信息。正如this post 中提到的,您需要为iOS 修改的config.xml 文件是项目文件夹中的那个(AppName,在上面,指的是项目文件夹)。

    您将在文档中看到,有许多不同的配置可用于将您的域列入白名单,其中一些配置比其他配置更安全(通过更具体)。以下配置可用于授予对所有域的访问权限,但非常不具体,因此安全性较低:

    <access origin="*" />
    

    确保您的 iOS 白名单配置是最新的后,设置async: false 并再次尝试请求。

    【讨论】:

    • 我已将所有网址列入白名单,但无法正常工作
    • 您在两个配置中都将它们列入白名单?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2020-04-03
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多