У меня следующая проблема.В приложении 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) с отключенной веб-безопасностью (из-за той же политики происхождения), все работает нормально.Phonegap обычно не должен заботиться о SOP из-за файла: /// Protocol.Я добавил следующее в 'mobileinit':
$(document).bind("mobileinit", function() {
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
});
Но когда я запускаю тот же код в Chrome без отключения веб-безопасности, я получаю те же ошибки, что и в эмуляторе Android.
Iтакже попробовал AJAX-вызов википедии (с html вместо xml и GET вместо POST), и это сработало без проблем.
Также я думаю, что AJAX to Sharepoint даже не запускается (нет трафика)в Fiddler2, если бы мне удалось настроить его правильно)
Так что я действительно застрял с этой проблемой уже 2 дня, если кто-нибудь знает, как заставить этот вызов ajax работать, это сделало бы меня таким счастливым:-)
(soapEnv - это конверт XML, отправленный на сервер)