11

jQuery mobile と Phonegap (現 Cordova) で iPhone/Android アプリを開発しました。このアプリは問題なくさまざまなサービスを使用しています。このサービスの 1 つは Soap であるため、サービスを要求するために jQuery に jsSOAPClient (jquery.jqSOAPClient.js) を使用します。iOS デバイスからはまったく問題ありませんが、Android ではクエリが常に失敗します。

jsSOAPClient では、リクエストは次のようになります。

        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);
             }
        });

「getResponse」「status」の値は「error」で、「SOAPClient.Status」(「xData.status」と同じ)の値は「0」です。

サーバーはリクエストをまったく受信していないようです...

同じリクエスト データを使用した同じコードが iOS で結果を返すことを繰り返します。

手伝ってくれてありがとう。

/編集* / 次の行にコメントを付けてみました:

//type: "POST",

予期しない応答形式が原因で解析エラーが発生した場合でも、この場合は 200 ステータス コードがあることを意味します。

4

1 に答える 1

1

Android 2.x には、「Content-length」ヘッダーを設定すると、説明した問題が発生するバグがあるようです。Android 4.0.3 でバグが修正されたようです。したがって、コードを変更せずに 4.0.3 エミュレーターで試してみてください。動作するはずです。その後、2.x に戻って Content-length ヘッダーを削除し、同様に動作するかどうかを確認してください。

于 2012-08-07T14:50:37.117 に答える