2009-07-06 8 views
1

デバッグの目的でgetJSONではなく$ .ajaxを試しています。 getJSONはIE(6,7,8)でエラーを報告しなかったので、jQueryプラグインが返されたイメージをInternet Explorerの画面にペイントしていないのはなぜですか?他のブラウザに表示されている理由を調べようとしています。IEでFireFoxではなく.ajaxコールエラー

だから私はこれを試しました。興味深いことに、IEのエラーイベントには当てはまりますが、Firefox、Safari、その他のものではありません。理由はわかりません(このコードはうまく動作し、FireFoxとその残りの部分でデータをレンダリングします)私は戻っJSONが有効である知っている:

$.ajax({ 
    type: "GET", 
    url: "http://localhost:59396/sss/sssHandler.ashx?action=getproducts&ids=" + ids, 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data) { 
     alert(data.length); 
     carousel.size(allProductIDs.length); 

     if (numberOfImagesLeftToShow < numberOfImagesToDisplay) { 
      first += (numberOfImagesToDisplay - numberOfImagesLeftToShow); 
     } 

     var d = 0; 
     for (var i = first; i <= last; i++) { 

      if (d != undefined) { 
       // add data using index of the array returned by JSON (which starts at 0) 
       carousel.add(i, decode(data[d].ImageTag)); 
      } 

      // set to last ProductID showing in Carousel 
      if (i == last) { lastProductID = parseFloat(data[d].ProductID); } 

      d++; 
     } 
    }, 

    error: function() { 
     alert("An error has occurred. Please try again."); 
    } 
}); 

私はIEが返されるJSONとそんなに問題が発生したか、単にgetJSON ORこのいずれかを使用した機能(データを)実行している理由をトラブルシューティングするために行うには他に何かわかりません。私は応答にもキャッシュを設定していません。それは問題ではありません。 問題はどんな理由であれ、IEは応答に自分の機能(データ)を入力することを拒否します。ここで

は、返された有効な示しJSON(さえhttp://www.jsonlint.com/でそれをチェックする)です:私の.ashxで

[ 
    { 
     "ImageTag": "\u003cdiv class=\"CarouselItem 
\"\u003e&lt;p&gt;&lt;img src=&quot;http://www.xxx.com/image/ 
2568.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;\u003cp\u003e\u003ca href= 
\"Bear-10.prod\"\u003eTeddy Bear\u003c/a\u003e\u003c/p\u003e\u003cp 
\u003e$20.95\u003c/p\u003e\u003cdiv\u003e", 
     "ProductID": "540" 
    }, 
    { 
     "ImageTag": "\u003cdiv class=\"CarouselItem 
\"\u003e&lt;p&gt;&lt;img src=&quot;http://www.xxx.com/image/ 
50.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;\u003cp\u003e\u003ca href= 
\"Pendant362.prod\"\u003eBirthday\u003csup\u003e©\u003c/sup 
\u003Necklace\u003c/a\u003e\u003c/p\u003e\u003cp\u003e$36.95\u003c/p 
\u003e\u003cdiv\u003e", 
     "ProductID": "83" 
    } 
] 

私は単に製品を、主に以下のコードを

 context.Response.ContentType = "application/json"; 
     context.Response.Charset = Encoding.UTF8.ToString(); 
     context.Response.Cache.SetNoStore(); 
     context.Response.Cache.SetExpires(DateTime.MinValue); 
     context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     context.Response.Cache.SetValidUntilExpires(false); 

     context.Response.Expires = -1; 
     context.Response.ExpiresAbsolute = DateTime.MinValue; 
     context.Response.AddHeader("Cache-Control", "no-cache"); 
     context.Response.AddHeader("Cache-Control", "post-check=0, pre-check=0"); 
     context.Response.AddHeader("Pragma", "no-cache"); 

... 

string jsonString = imageList.ToJSON(); <-- uses the .NET 3.5 JavaScriptSerializer 
     context.Response.Write(jsonString); 

も応答を持っています少なくとも、FireFoxで有効なデータが返されて解析されているため、response.ContentTypeを "application/json"または "text/plain"と指定しても問題はありません。

答えて

1

私はそれがjsonデータだと思っています。まず、問題を試してみてください。単純に戻るとリクエストは機能しますか?

[ 
    { 
     "ImageTag": "imagePath", 
     "ProductID": "540" 
    }, 
    { 
     "ImageTag": "imagePath", 
     "ProductID": "83" 
    } 
] 

もしそうなら、そのエンコードのいくつかでは問題があります。

N.B jsonlintに貼り付けたjsonも試しましたが、2番目のイメージでimageTagの最後の行を削除しない限り、検証することができませんでした。

また、実際にjsonでhtmlを返す必要がありますか。もしそうなら、なぜ単にHTMLは、これが問題に関連している場合、あなたが本当に

+0

を実行しました。同じ結果。 FireFoxでは正常に動作しますが、IE8では正常に動作しません。それはエラーを打つ:と私は行を得る:163 エラー:システムエラー:-1072896658。 163行目が私のエラーです。function(){ alert( "エラーが発生しました。もう一度やり直してください。"); } – PositiveGuy

+0

実際には、そこにHTMLを戻したいのですが、それはimgタグに過ぎません...重いものはありません。 – PositiveGuy

+0

これは、同じ正確なコードが他のすべてで実行されるのは意味がありませんが、IEとIEは何も解析できません! – PositiveGuy

1

わからない軽量JSON構造の恩恵を受けていないとして得るが、のcontentTypeパラメータは、に送信されるデータのMIMEタイプを指定しないでください受信していないサーバーに送信します。

何も送信していないので(URLに指定されたクエリ文字列でGETするだけです)、オプションでcontentTypeまたはdataパラメータは必要ありません。

+0

はい私はそれを取り出しました。 – PositiveGuy

0

jQueryはeval( "(" + data + ")")を使用し、JSONデータが必要であると指定しているため、結果を成功関数に渡します。このコンテンツタイプを「テキスト」に変更し、成功コールバックでJSON.parseを使用して解析する価値があります。ちょうどアイデア!

0

を除去し、それを修正:

context.Response.Charset = Encoding.UTF8。ToString();

変更: context.Response.ContentType = "application/json; charset = utf-8";

関連する問題