サーバーでホストされている WCF サービスを使用するための Ajax。クロスドメインリクエストを使用するために、JQMの次のフラグを既に構成して許可しています。
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
同じコードが Android エミュレーターとデバイスで動作しています。また、IOS アプリの Phonegap の config.xml ファイルで URL を許可しました。
また、Safari と IOS エミュレーターで同じ HTML ページを閲覧できます。両方の Web サービスで正常に動作しています。この問題は、iOS エミュレーターまたはデバイスで phonegap アプリをビルドして実行すると発生します。サービスは呼び出されず、$.ajax の成功コールバックが呼び出されます。成功した応答を確認したところ、Web サービス URL ページ (.svc) の HTML が返されていることがわかりました。
次のコードを使用して、$.ajax を使用して SVC を呼び出しました
var soapRequest = '<?xml version="1.0" encoding="utf-8"?>'
+ '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">'
+ '<soap:Body>'
+ '<SignIn xmlns="http://tempuri.org/">'
+ '<UserName>' + $.trim($('#txtEmail').val()) + '</UserName>'
+ '<Password>' + $.trim($('#txtPassword').val()) + '</Password>'
+ '<DeviceDetails>' + GetDeviceInfo() + '</DeviceDetails>'
+ '</SignIn>'
+ '</soap:Body>'
+ '</soap:Envelope>';
$.ajax({
beforeSend: function (xhr) {
ShowLoading('Please wait...');
xhr.setRequestHeader("SOAPAction", "http://tempuri.org/IService/SignIn");
}, //Show spinner
complete: function () {
HideLoading();
}, //Hide spinner
url: "http://somedomain/service.svc",
type: "POST",
dataType: "xml",
data: soapRequest,
contentType: "text/xml; charset=\"utf-8\"",
success: function (rcvdata, status) {
alert(rcvdata); // THIS IS GIVING HTML OF SERVICE PAGE
},
error: function (request, status, error) {
alert(request + "\n" + status + "\n" + error);
HideLoading();
}
});
また、AJAX の async および processdata オプションの値を変更することに結び付けましたが、常に svc サービス ページの html を返します。Ajax リクエストのステータスは常に 200 です。
この問題は Phonegap IOS アプリでのみ発生します。IOS エミュレータ ブラウザで HTML ページを直接開くと、サービスが正常に呼び出され、有効な SOAP 応答が返されました。
私はPhonegap 2.8.1を使用しており、2.9.0でも試しました
前もって感謝します。
編集 - - - - - - -
IIS で WCF サービスのローカル環境をホストすると、正常に動作し、サービスから応答を受け取りました。また、ローカル サーバーとライブ サーバーの IIS 設定を確認して比較しました。どちらも同じ