我在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结构。
需要帮助。 感谢
答案 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
并再次尝试请求。