3

問題があります... jQuery ajax を使用して、XML を返す Web サービスを呼び出しています。jQuery ajax は、ie を除くすべてのブラウザーでうまく機能します。

つまり、ブラウザの場合、私は XDomainRequest を使用しています。コードは次のとおりです。

if ($.browser.msie && window.XDomainRequest) {
    // Use Microsoft XDR
    var xdr = new XDomainRequest();
    xdr.open("get", theUserUrl);
    xdr.timeout = 95000;
    xdr.onerror = function () {
        console.log('we have an error!');
    }
    xdr.onprogress = function () {
        console.log('this sucks!');
    };
    xdr.ontimeout = function () {
        console.log('it timed out!');
    };
    xdr.onopen = function () {
        console.log('we open the xdomainrequest');
    };
    xdr.onload = function () {
        // XDomainRequest doesn't provide responseXml, so if you need it:
        var xml2 = new ActiveXObject("Microsoft.XMLDOM");
        xml2.async = false;
        xml2.loadXML(xdr.responseText);
        console.log('do we get any response text at all?: ' + xdr.responseText);
        ParseOwnershipObjects(xml2);
        //AddServiceRequestsToMap(xml2, map, spinner);
    };
    xdr.send();
}
  • この正確なコードは、別の URL を使用してアプリケーション内の他の場所で正常に機能します。

    URL は問題ありません。ブラウザに表示されるはずのものを正確に返します (したがって、jquery ajax 呼び出しが機能する理由)。いくつかの注意事項:

    自分の html/javascript を別の人の asp.net プロジェクトに統合しています。

global.asax.csファイルには、次のものがあります。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,OPTIONS");
}

したがって、ヘッダーの問題ではないと思います。

私のハンドラーは誰も発砲しません。onprogress、ontimeout、onerror ではありません...何もありません! Web サービスを JSON に変換する時間がありません。

何かご意見は?

ありがとう!

4

2 に答える 2

2

免責事項 - 私は実際には「XDomainRequest」を使用していません - jQ を使用する場合jsonp、xdomain リクエスト用にデータを設定します...

デバッグ時 - IE 開発ツール ( F12) を使用していますか? そうでない場合、エラーの可能性がありますconsole.log

編集:mea culpa、jsonpものを無視してください-あなたが言及した部分を逃しましたXML


アップデート:

好奇心から試していXDomainRequestます。あなたのコードをコピーして、 の値を追加しましたtheUserUrl

  • 上記/予想どおり、Internet Explorer 開発者ツールを実行していない限り、「どのハンドラも起動していない」という印象を与える可能性がありますconsoleundefined

  • IE開発ツールを有効にすると(ドッキングまたはその他の方法で)xdr.onerror起動します。we have an errorIE コンソールにログインします。したがって、エラーが発生している間、ハンドラー起動します。

Internet Explorer 開発者ツール コンソール

簡単に読むにXDomainRequestは、応答するサーバーにAccess-Control-Allow-Originヘッダーが必要です。私は自分のサーバーを呼び出していますが、このヘッダーが設定されていないことはわかっているため、さらにデバッグを行わなくても、 が起動されていると推測できxdr.onerrorます。

于 2012-05-16T00:04:07.403 に答える
1

実は、URLパラメータには、XDomainRequestオブジェクトによって正しく処理されていない特殊文字が含まれていました。GETリクエストの代わりに、InternetExplorerのみのクエリでPOSTリクエストを使用します。

編集-最終的にWebサービスを切り替えてJSON形式で出力を返すようにしたため、XDomainRequestの必要性がなくなりました。JSONを使用すると、処理速度も少し速くなります。お勧めします。

于 2012-05-16T19:37:11.523 に答える