2009-04-23 12 views
14

私は、jQueryを使用していくつかの画像asyncを読み込むためのスクリプトを作成しています。私は、Firefox、Webkitの(サファリ、クローム)でこれをテストしてきたし、それが動作IEがjQuery Ajaxの成功を引き起こさない

try{ 
    for(img in imgsArray){ 
     $.ajax({  
      async: false, 
      type: "get", 
      url:imgsArray[img], 
      success:function(imgFile){ 
       alert("success"); 
       //do something useful 
      }, 
      error:function(XMLHttpRequest,status,error){ 
       //do nothing 
      } 
     });//ajax 
    } 
} 
catch(e){ 
    //oops 
} 

- ここ

は、画像をロードする関数のコードスニペットです。

イメージはサーバー上のフォルダにあり、jQuery 1.3を使用しています。

任意のアイデア?

+0

を使用しないでください?そこには何が見えますか? –

+0

エラー関数がヒットしますか?エラーがあれば何かを知るためにそこにいくつかのコードを置くべきです。 – Damovisa

+0

ええ、キャッチにアラートを追加して、エラーが発生していないかどうかを確認してください。また、 "get"ではなく "GET"に変更したい場合があります –

答えて

16

この問題の単純な修正は、jQueryの設定dataType : 'text'またはdataType : 'xml'またはdataType : 'json'または他の利用可能な応答タイプを提供することです。

私は同じ問題を抱えていましたが、データタイプの設定を。ajax呼び出し。

IEは実際にはインテリジェントなブラウザではなく、デフォルト値の文字列ではありません。

お試しください...幸運。

0

私はCharles Proxyを使って何が起こっているのかを確認することをお勧めします。レスポンスは何ですか?

また、例外がスローされる可能性があるので、Catchセクションにアラートを追加して何が起こるのを確認してください。

+0

私はajax呼び出しの開始時と終了時、および成功関数とエラー関数内に警告文を入れました。彼らはすべて「成功」を除いて解雇された。フィドラーを使ってレスポンスを見た後、私はIEが404の応答しか返さないことを発見しました。 Firefoxでは202と404の回答がありますが、IEでは404しかありません。私はそれがIEのセキュリティモデルと私のサーバーの設定かもしれないと思う。 – Peter

1

JSONP Webサービスで、私は過去数日間、IEとAJAXで同様の問題を抱えてきました。コード内の最小のエラーでさえ、すべてがIEで中断する可能性があります。

おそらく、Visual Web Developer ExpressまたはVisual Studioを使用してIEでページをデバッグするのが最も良い方法です。

How to debug JavaScript with Visual Web Developer Express

の指示に従ってください、多分AJAX要求の初めににブレークポイントを配置します。ここではそれを行う方法のチュートリアルです。

あまりにもこれらの事を試してみてください。エラーフィールドから「XMLHttpRequestの」を削除

  • が、私は前にそれを使ったことがないし、私のコードは正常に動作します。
  • jquery(1.3.2)の最新バージョンを使用していることを確認してください。

すぐにご利用いただけますようお願いいたします。

+0

ありがとうございます。これは、特にIE6-7のIEデバッグの素晴らしいヒントです。私はIE8のデバッグ機能のファンではありませんが、それはスタートです。 エラーレスポンスはうまくいくようですが、成功しない可能性があります。私は最新のjQueryビルドにもアップグレードしました。それは私のサーバーのセットアップとIEのクロスドメインスクリプティングのブロックかそのようなものかもしれません。これは、支柱に構築された動的なWebページです。基本的には、そのURLにイメージが存在するかどうかをテストしたい。 – Peter

+0

提案していただきありがとうございます。 – Peter

1

最後に、IEブラウザ用に別の機能を作成しなければなりませんでした。

コードのようなものに見えたので、目標は場所に画像をテストするためだった -

//get the images from the array 
for(img in imgsArray){ 

    if($.browser.msie){  
    /* DOM manipulation method */ 
    //IE has problems with ajax so try this instead 
    //create a new image object with unique ID 
    var testImg = $("<img/>"); 
    var imgID = "imgID"+img; 

    //hide it.. 
    testImg .css({ "visibility":"hidden" }); 
    testImg .attr("src",imgsArray[img]); 
    testImg .attr("id",imgID); 

    //.. and insert it into the DOM or else test will always fail 
    //because it does not exist as far as browser is concerned 
    $("body").append(testImg); 

    //test for image 
    if(document.getElementById(imgID).width > 60){ 
     //do something useful 
    } 
} 

それは本当に私の質問への答えではないが、それは周りの機能的なワークだが。

7

私は同様の問題がありました。リクエストが成功したとしてもIEが応答を解析できない場合、IEが失敗を引き起こすように見えるので、イメージをリクエストしている場合エラーブロック内のxhr.statusが200です。

FFの成功ブロックと "if(xhr.status == 200)"という条件でラップされたエラーブロックに「成功」​​機能がスタックされました。

+0

。賢い私はそれをもう一度見なければならないかもしれない。ありがとう – Peter

11

キャッシュされたオプションをfalseに設定してみてください。

-1

入力チェックを使用する場合は、「選択済み」として選択肢がある場合は、このパラメータをajax関数に渡さないでください。

+0

これを説明するコード例を提供できますか? –

3

クロスブラウザをサポートするには、次のタグを使用してください。

$ .support.cors = true;

1

セット 'キャッシュ:false' にアヤックスコンフィグ内部は私の作品:)

0

あなたの成功があるとします。このため

Success: function (data) { 
        if (data != null) { 
         alert(data); 
         ; 
        } 
       }, 

変更:

success: function (data, textStatus, XMLHttpRequest) { 
       alert(data.d); 
      } 
0

することができますもう一つはJohn Saundersのソリューションと同じように、jsonの代わりにコンテンツタイプとして "jsonp"を試してみてください - jsonデータタイプの期待される応答。私はバグを取り除くためにIEでこれを試しなければなりませんでした。これは、IE以外の他のすべてのブラウザで動作する通常のコードでした。

$.ajax({ 
    url: request_url, 
    data: { var1: 'stuff' }, 
    dataType: "jsonp", 
    type: "get", 
    async: true, 
    cache: false, 
    success: function(collections) { 
     // handle result 
    } 
}); 

乾杯:

はここで働いていた私のコードです。

0

私はこの問題に似た問題を抱えていました。上記の答えは私の多くの問題を解決しました。しかし、もう1つ必要なことがあります。私はあなたがすでにフィドラーでの応答を見てきましたと推定

$.ajax({..., 
success: myfunc,...}); 

使用

$.ajax({..., 
success: myfunc(),...}); 
関連する問題