2

シンプルな dojo xhr リクエストを使用しています。

require(["dojo/query", "dojo/on", "dojo/dom-style", "dojo/request/xhr", "dojo/domReady!"],
            function (query, on, domStyle, xhr) {

                xhr("api/products", {
                    handleAs: 'json'
                }).then(function (data) {
                    console.log('GOT DATA FROM DOJO XHR', data);
                }, function (err) {
                    console.log('ERROR FROM DOJO XHR', err);
                });
            }
        );

これは問題なく動作しますが、返されるデータは JSON ではなく XML です。

ただし、jQuery で同じ呼び出しを行うと、JSON でデータが返されます。

ヘッダーを見ると、jQuery 呼び出しの場合は次のように表示されますContent-Type application/json; charset=utf-8が、dojo 呼び出しの場合は次のように表示されます。Content-Type application/xml; charset=utf-8

私も追加しました:

headers: { "Content-Type": "application/json; charset=uft-8" }

xhr パラメータに追加しますが、まだ運が悪く、xml が返されます。

何を与える?dojo xhr に json として処理するように指示するにはどうすればよいですか? 私は道場1.8.3を使用しています。

4

3 に答える 3

1

サーバー側の修正は機能しますが、これは一時的な解決策です。サーバーは、Accept ヘッダーで確認した内容に正しく応答します。Dojo xhr 呼び出しで「application/json」を指定しても、何らかの理由で Firefox は「text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8」などに置き換えます。その結果、.NET は JSON ではなく XML を返します。他のブラウザでは発生しません。

私はまだそれを正しい方法で修正する方法を見ています。

更新:答えがあると思いますが、なぜそれが修正されるのかわかりません。次のように xhr リクエストでヘッダー値を設定すると、すべてが Firefox で機能します。

ヘッダー: { 'Content-Type': 'application/json; charset=utf-8', 'Accept': 'application/json' }

二重引用符を使用すると、これらのヘッダーはサーバーに送信されず、代わりに XML が返されます。

于 2015-09-16T02:08:36.833 に答える
1

サーバー自体はそのように動作しません。dojo と jquery が xhr を実行するときに何を要求しているか、firebug を使用して確認します。dojo または jquery であることをサーバーに伝えるパラメーターが必要です。そのパラメーターを変更します。

dojo と jquery は同じで、js に基づいており、どちらも xhr を使用します。両方の正確なリクエスト情報を投稿することを検討してください。

于 2013-04-06T09:22:11.753 に答える
0

わかりました、なぜそれが起こっているのかという問題は見つかりましたが、根本的な原因は見つかりませんでした。

json サービスに asp.net mvc4 で Web API を使用しています。dojo の場合、サービスは xml を返しますが、jQuery の場合は json を返します。

したがって、他の誰かが興味を持っている場合、私がそれをどのように修正したかは、WebApiConfig で、サポートされている戻り値の型として xml を削除したことです。

        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

私は JSON にしか興味がないので、これで問題ありませんが、両方をサポートする必要がある場合は、さらに詳しく調べる必要があるかもしれません。

要約すると、この問題は実際には dojo xhr の問題ではありません。つまり、クライアントの問題ではなく、リクエストを適切に処理していないサーバーの問題です。

それが他の誰かに役立つことを願っています。

于 2013-04-06T05:19:55.240 に答える