AJAX для Sharepoint Server с PhoneGap и JQuery Mobile не работает - PullRequest
1 голос
/ 28 февраля 2012

У меня следующая проблема.В приложении 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, отправленный на сервер)

1 Ответ

2 голосов
/ 28 февраля 2012

Хорошо, я знаю, что когда-то в jQuery была ошибка, в которой статус запроса 0 считался ошибкой.При запуске из файлового протокола состояние 0 совпадает со статусом 200 (ОК).Возможно, вам придется обновить вашу версию jQuery.

В качестве альтернативы, чтобы проверить мою теорию, просто сделайте простой XHR-запрос в вашу службу, чтобы проверить, работает ли он.Вот мой фондовый пример:

http://simonmacdonald.blogspot.com/2011/12/on-third-day-of-phonegapping-getting.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...