0

これは(うまくいけば)簡単な質問です。XDomainRequestを使用してPOSTを介してWebサービスにリクエストを送信する必要があります。私はインターネット上でこれに関するまばらなドキュメントを見つけました、しかし私は誰もこれを理解していないと信じることを拒否します。

これが私のXDomainRequestコードです:

var testURL = 'http://localhost:4989/testendpoint';

//let us check to see if the browser is ie.  If it is not, let's 
if ($.browser.msie && window.XDomainRequest) {
    var xdr2 = new XDomainRequest();
    xdr2.open("POST", testURL);
    xdr2.timeout = 5000;
    xdr2.onerror = function () {
        alert('we had an error!');
    }
    xdr2.onprogress = function () { 
        alert('we have some progress!');
    };
    xdr2.onload = function () {
        alert('we load the xdr!');

        var xml2 = new ActiveXObject("Microsoft.XMLDOM");
        xml2.async = true;
        xml2.loadXML(xdr2.responseText);
    };

    //what form should my request take to be sending a string for a POST request?  
    xdr2.send("thisisastring");
}

私のWebサービス(WCF)は、Webサービスのヘルプページに従って、次のような単一のパラメーターを取ります。

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">String content</string>

これは、他のhttpクライアント(モバイルおよびデスクトップAPI、フィドラー)を介して、Webサービスに渡そうとしているパラメーターと残りの文字列シリアル化を連結する文字列を作成することで機能するようになりました。たとえば、私は試しました:

xdr2.send("thisisastring");
xdr2.send("<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">thisisastring</string>");

ただし、onerrorハンドラーは常に作動します。WCFとは何の関係もないと思います。理由は次のとおりです。

  • WCFは、私が呼び出す他のすべてのクライアントで常に成功します。
  • それがサービスである場合、onerrorメソッドがトリップすることはありません。ゴミを返しますが、何かを返します。

コンソール(ie9の開発ツールで)を使用してresponseTextをログに記録すると、次のように表示されます。

LOG:undefined

したがって、問題はXDomainRequestの使用方法にあると確信しています。

4

1 に答える 1

0

誰かがこれに遭遇した場合、私は自分のWebサービスをJSON形式のデータを返すように変換することになりました。JSONを使用すると、XDomainRequestが不要になり、代わりに従来のajaxjqueryツールを使用できるようになります。

于 2012-05-19T22:56:26.187 に答える