4

外部サーバーに対して $.ajax 呼び出しを行っています。このサーバーはリダイレクトを返し、リダイレクトされたページは json を返します。これは FF と Chrome では問題なく動作しますが、Safari と Opera は気に入りません。

ここに私の $.ajax コードがあります:

$.ajax(
{
    url:url,
    dataType:"json",
    success:function(data)
    {
        console.log("success");
    },
    complete:function()
    {
        console.log("complete");
    }
});

Firefox と chrome では、これは適切に機能します。各 ajax 応答に対して「成功」が呼び出されます。しかし、サファリとオペラでは、「成功」は決して呼び出されず、「完了」のみが呼び出されます。ネットワーク リクエスト コンソールには、次の情報が表示されます。

resolve.json    GET 302 application/json
1817995.json    GET (canceled)  undefined

1717995.json は、resolve.json から送信されるリダイレクトです。リクエストがキャンセルされた理由がわかりません(レスポンスで示されているようです)。

誰でもこれについて助けてもらえますか?

4

1 に答える 1

1

私見は、クロスドメイン(オリジン)の問題です。お使いのブラウザは、デフォルトではクロスブラウザ ajax リクエストを行いません。json の代わりに jsonp を使用してみてください。

dataType:"jsonp"

ただし、これはサーバーが jsonp をサポートしている場合にのみ機能します (その場合、コールバック関数の名前も指定する必要があります)。

jsonp がサポートされていない場合は、サーバーからプロキシを作成できます。基本的にそれも必要ありません。リダイレクトする代わりに、サードパーティのサーバーからファイルを「ダウンロード」して、応答として出力します。

これが新しいブラウザでのみ機能することが問題ない場合は、これを試すことができますサーバー側の「プロキシ」IMHOよりも優れたソリューションです)

于 2012-06-07T14:14:40.443 に答える