【发布时间】:2012-03-17 23:30:24
【问题描述】:
我有以下问题。在 Phonegap 应用程序(适用于 Android)中,我想使用以下代码进行 AJAX-Call 以连接 Sharepoint 服务器:
$.ajax({
url:"https://xxx/_vti_bin/lists.asmx",
beforeSend: function( xhr ){
xhr.setRequestHeader(
"SOAPAction",
"http://schemas.microsoft.com/sharepoint/soap/GetListCollection"
);
xhr.setRequestHeader("Content-Type","text/xml; charset=utf-8");
},
dataType:"xml",
contentType: "application/xml; charset=utf-8",
timeout:10000,
type:'POST',
cache: false,
username: "username",
password: "password",
data: soapEnv,
success:function(data) {
// alert data
var serializer = new XMLSerializer();
serialized = serializer.serializeToString(data);
alert(serialized);
},
error:function(XMLHttpRequest,textStatus, errorThrown) {
// alert errors
alert("Error status :"+textStatus);
alert("Error type :"+errorThrown);
alert("Error message :"+XMLHttpRequest.responseXML);
alert("Error statustext :"+XMLHttpRequest.statusText);
alert("Error request status :"+XMLHttpRequest.status);
},
complete: function(jqXHR, textStatus){
alert(textStatus);
}
});
当我尝试在 Android 模拟器上运行它时,错误消息是:
Error status: error
Error type:
Error message: undefined
Error statustext: error
Error request status: 0
但是,当我尝试在禁用网络安全的浏览器 (Chrome) 上运行它时(因为同源策略),它一切正常。由于 file:/// 协议,Phonegap 通常不应该关心 SOP。我在“mobileinit”中添加了以下内容:
$(document).bind("mobileinit", function() {
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
});
但是当我在没有禁用网络安全的情况下在 Chrome 中运行相同的代码时,我得到的错误与在 Android 模拟器中完全相同。
我还尝试了对 wikipedia 的 AJAX 调用(使用 html 而不是 xml,使用 GET 而不是 POST),并且没有问题。
另外我认为 AJAX 到 Sharepoint 甚至不会被触发(如果我设法以正确的方式配置它,Fiddler2 中没有流量)
所以我真的被这个问题困扰了两天,如果有人知道如何让这个 ajax 调用工作,那会让我很高兴:-)
(soapEnv 是 XML 信封,发送到服务器)
【问题讨论】:
-
嗨,你能解决这个问题吗?希望您能分享您的解决方案。
标签: android sharepoint jquery cordova https