2012-04-16 5 views
11

Ich entwickelte eine iPhone/Android App mit jQuery Handy & Phonegap (jetzt Cordova). Diese App verwendet verschiedene Dienste ohne Probleme. Einer dieser Dienste ist ein Soap, also verwende ich den jsSOAPClient (jquery.jqSOAPClient.js) für jQuery, um den Dienst anzufordern. Ich habe überhaupt kein Problem von einem iOS-Gerät, aber die Abfrage schlägt immer auf Android fehl.Soap Query mit jQuery/Phonegap scheitern immer auf Android

In jsSOAPClient die Anfrage so aussieht:

 function getResponse(xData, status) { 
      if(!!callback) { 
       SOAPClient.Status = xData.status; 
       SOAPClient.ResponseText = xData.responseText; 
       SOAPClient.ResponseXML = xData.responseXML; 
       callback(xData.responseXML); 
      } 
     } 

     $.ajax({ 
      type: "POST", 
      url: SOAPClient.Proxy, 
      dataType: "xml", 
      processData: false, 
      data: content, 
      complete: getResponse, 
      beforeSend: function(req) { 
       req.setRequestHeader("Method", "POST"); 
       req.setRequestHeader("Content-Length", SOAPClient.ContentLength); 
       req.setRequestHeader("Content-Type", SOAPClient.ContentType + "; charset=\"" + SOAPClient.CharSet + "\""); 
       req.setRequestHeader("SOAPServer", SOAPClient.SOAPServer); 
       req.setRequestHeader("SOAPAction", soapReq.Action); 
      } 
     }); 

Die "getResponse" "status Fehler" Wert "" und die "SOAPClient.Status" (gleich "xData.status") Wert " 0 ".

Der Server scheint Anfrage nicht ...

ich, dass der gleiche Code hat mit den gleichen Anforderungsdaten der Ergebnisse auf iOS wiederholen zu erhalten.

Danke für Hilfe.

/ EDIT */ Ich habe versucht, die Linie zu kommentieren:

//type: "POST", 

es scheint zu funktionieren, ich meine, ich habe einen 200-Statuscode in diesem Fall, selbst wenn ich eine habe Parse-Fehler aufgrund des unerwarteten Antwortformats.

+0

Ich habe das gleiche Problem, also, mein Angebot der Kopfgeld. Ich habe einige zusätzliche Informationen. Ich bat den Netzwerkadministrator, mit wireshark die Pakete zwischen dem Telefon und dem Server zu überwachen. Hier ist, was er beobachtet hat: –

+0

"TLSv1 scheint mit einem verschlüsselten Alarm abzubrechen, der vom Server bestätigt wird. Es gibt FIN-Pakete gefolgt von einem Reset (RST). Dies sieht wie ein Handshake aus, der am Client am Ende fehlschlägt Ende des Verhandlungsprozesses. " Ich schaute eine Nachricht und sah dies: "TLSv1 Record Layer: Verschlüsselte Warnung; Inhaltstyp: Alert (21); Version TLS 1.0 (0x0301); Länge 24; Alert Message: Verschlüsselte Warnung". Genau wie das OP habe ich nur ein Problem mit Android. –

+1

Hier sind zwei Links von Menschen, die dasselbe sehen, wir sind in wireshark: http: //code.google.com/p/android/issues/detail?id=8334 und http://groups.google.com/group/android -sicurity-discuss/tree/browse_frm/monate/2010-05? _done =% 2Fgroup% 2Fandroid-security-discuss% 2Fbrowse_frm% 2Fmonth% 2F2010-05% 3F & –

Antwort

1

Anscheinend gibt es einen Fehler in Android 2.x, wo die Einstellung "Content-Länge" Header verursacht das Problem, das Sie beschreiben. Es sieht aus wie der Fehler wurde in Android 4.0.3 behoben. Also versuchen Sie Ihren Code unmodified in der 4.0.3 Emulator und es sollte funktionieren, dann kommen Sie zurück zu 2.x und entfernen Sie die Content-Länge-Header, um zu sehen, ob es auch funktioniert.