带有phonegap的jQM移动应用程序中的$ .Ajax无法在iOS设备上运行

时间:2015-04-30 12:30:18

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

我在jQuery Mobile应用程序中有一个登录按钮。按下登录按钮后,将使用$ .ajax()方法调用soap服务。这适用于浏览器和Android手机,但控件甚至没有进入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结构。

需要帮助。 感谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果您的请求在Android和桌面浏览器上正常运行,但在iOS上没有,那么听起来您的应用程序的CORS配置可能存在错误。鉴于您提到在尝试使用async: false进行呼叫时收到“未声明的错误”,看起来您的域白名单配置可能是问题的根源。

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

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

<access origin="*" />

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