2012-04-18 16 views
4

新しいページに移動するためにAJAXポストリクエストからコールバックを使用していますが、Internet Explorerでは機能しません。次のように私のコードは次のとおりです。IEとwindow.location.hrefとの互換性がありません

$.ajax({ 
    type: "POST", 
    url: phpUrl, 
    data: data, 
    async: false, 
    success: function() {  
     if (navigator.appName == 'Microsoft Internet Explorer'){ window.location.href("/step2.php")} 
     else{ window.location.href = "/step2.php"}    
    }, 
    dataType:'json'   

}); 

これはFF /サファリ/クロームで正常に動作しますが、私はIE上でそれをテストするとき、それは動作しません。新しいページにリダイレクトするより良い方法はありますか? POSTリクエストが完了する前にページが変更されるだけで、コールバックを使用しなかった場合、Chrome/Safariにデータがロードされないため、async:falseを使用しています。

答えて

5

これはカッコです。 hrefは関数ではないので、呼び出しようとしています— window.location.href("/step2.php") —はTypeErrorです。あなたが直接locationのプロパティ(location.href='...';)に割り当てることができますが、私はお勧め、ブラウザがナビゲートさせる

location.assign('/step2.php'); 

:あなたはより良い次の行に行うなどhref

割り当て、location.assign()を使用それに対して

内部では、とにかくlocation.assign()を呼び出し、プロパティdoes not always behave the same in all browsersに割り当てているだけです。

について

async:false決してことを行います。同期XHR要求を行う場合、you're doing it wrong8.4%が報告されたIE9がハングしたのは、同期XHRがブラウザをブロックしたためです。

コールバックに入れると、locationへの割り当てはPOSTが完了するまで行われないため、「POSTが完了する前にページが変更される」という意味がわかりません。 (フォームのsubmitをキャンセルすることを忘れましたか?)

+0

strange。 'location.assign("/step2.php ");'はIEでは動作しませんが、FF/Safari/Chromeで動作します。関数として使用する私の最初の試みは、私が読んだドキュメント(@Hexxagonalも参照している)に基づいていました。 – djq

+0

私は 'async'についてあなたの意見を取ります - 私はそれを削除しました。アドバイスをいただきありがとうございます。 – djq

+2

_Never_は強い言葉です。同期Ajaxには、時には必要かつ有用です。しかし、あなたのポイントはよく取られます。また、ブロックが必要な場合は、開発者は何かが起こっていることを目に見えるように注意する必要があります。つまり、ajaxローダーgifです。 – peter

0

window.location.href = "/step2.php"です。

+1

hmmm、IE以外のすべてでうまくいきます!このブラウザではうまくいかない理由について考えていますか? – djq

+0

http://msdn.microsoft.com/en-us/library/ie/ms533867(v=vs.85).aspx – scottheckel

0

IEは完全なURLのようにのみ表示されます。

var fullURL = 'http://www.your_site.com/step2.php'; 

$.ajax({ 
    type: "POST", 
    url: phpUrl, 
    data: data, 
    async: false, 
    success: function() { 

     window.location.href(fullURL); 

    }, 
    dataType:'json'   
}); 
関連する問題