0

SO や他の場所でこの問題を抱えている他の多くの人々を見てきましたが、与えられた解決策はどれもうまくいかないようです。

ASHX ハンドラーへの jQuery AJAX 呼び出しがあります。このコードは Firefox と Chrome では機能しますが、IE (バージョン 8、9、または 10) では機能しません。

そのように見えます(簡略化):

var val = $(this).val();

$.ajax({
    url: '/Source/Handlers/Search.ashx?q=' + val,
    type: "GET",
    cache: false,
    dataType: 'json',
    error: function(w,t,f) {
         alert(w + "\n" + t + "\n" + f);
    },
    success: function (data) {
         ...
    }
 });

IE でコードを実行すると、エラー ハンドラが開始され、次のように表示されます。

[object Object]
error
error

便利でしょ?

ASHX ハンドラーは次のようになります (これも単純化されています)。

public class Search : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        context.Response.ContentType = "application/json";
        context.Response.Buffer = false;

        JavaScriptSerializer serializer = new JavaScriptSerializer();
        List<Suggestions> jsonResponse = new List<Suggestions>();

        // do some stuff

        context.Response.Write(serializer.Serialize(jsonResponse));
    }
}

「GET」を「POST」に交換しようとしました。「キャッシュ」プロパティを有効または無効にしようとしました。「json」、「xml」、「text」などのさまざまな dataType 設定を試しました。

HTTP Fiddler を使用すると、json 応答が戻ってくることがわかりますが、IE はそれを処理できないようです。

何か案は?

編集

HTTP Fiddler からの TextView の JSON 応答を次に示します。

543
[{"title":"GAMES","results":[{"title":"abcdefg™","link":"http://www.abcdefg.com/en_gb/abcdefg/","image":"/uploadedImages/abcdefg/games/1-Game_Folder_Master(1)/Config/abcdefg(1).jpg","total":""},{"title":"abcdefg","link":"http://www.abcdefg.com/en_gb/abcdefg","image":"/uploadedImages/abcdefg/games/1-Game_Folder_Master(1)/Config/abcdefg.jpg","total":""},{"title":"abcdefgg","link":"/Retailers/?game=1432&amp;platform=0","image":"/uploadedImages/abcdefg/games/1-Game_Folder_Master(1)/Config/abcdefg.jpg?n=9736","total":""},{"title":"abcdefg","link":"http://www.abcdefg.com","image":"/uploadedImages/abcdefg/games/1-Game_Folder_Master(1)/Config/abcdefg.jpg","total":""},{"title":"abcdefg","link":"/Retailers/?game=1763&amp;platform=0","image":"/uploadedImages/abcdefg/games/1-Game_Folder_Master(1)/Config/abcdefg_promo.jpg","total":""}],"total":"24","link":"/Search/?q=total"},{"title":"MEDIA","results":[{"title":"Videos","link":"/Search/?q=total","image":"","total":"1"},{"title":"Screenshots","link":"/Search/?q=total","image":"","total":"35"}],"total":null,"link":null}]
0

編集2

うーん、w.status を警告する $.ajax 呼び出しを更新したところ、"404" が返されました。混乱 - Fiddler が応答を 200 として表示するときに、ステータスで 404 を返すにはどうすればよいですか?

4

4 に答える 4

1

このような問題をぼんやりと覚えています。追加してみていただけますか

contentType: "application/json; charset=utf-8"

ajax リクエストのプロパティに。当時の問題は解決したと思います。

于 2013-03-27T16:17:47.920 に答える
0

追加data : {q : val}してみて、これで問題が解決するかどうかを確認してください。

 var val = $(this).val();

 $.ajax({
    url: '/Source/Handlers/Search.ashx',
    type: "GET",
    data : {q : val},  //<--------send it this way
    cache: false,
    dataType: 'json',
    error: function(w,t,f) {
       alert(w + "\n" + t + "\n" + f);
    },
    success: function (data) {
       ...
    }
 });
于 2013-03-27T16:14:55.500 に答える
0

多くの試行錯誤の後、私は問題を見つけました。IE を使用する場合、ASHX ハンドラから返されたデータ オブジェクトで JSON.parse(data) を呼び出す必要があります。これを行うには、Ajax を呼び出す非 jQuery メソッドを使用します。これは、Javascript の 2 つの異なるブロック (1 つは IE 用、もう 1 つは他のブラウザー用) を持っていることを意味します。

if ($.browser.msie) {
    var xhReq = new XMLHttpRequest();
    xhReq.open("GET", "/Source/Handlers/Search.ashx?q=" + val + "&d=" + dateObj.getTime(), false);
    xhReq.send(null);
    AjaxSuccess(xhReq.responseText);
} else {
    $.ajax({
        url: '/Source/Handlers/Search.ashx',
        type: "GET",
        cache: false,
        dataType: 'json',
        data: { q: val },
        contentType: "application/json;",
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.responseText);
        },
        success: function (data) {
            ...
        }
    });
 }

 function AjaxSuccess(data) {
     data = JSON.parse(data);
     ...
 }

奇妙なことに、JSON.parse() メソッドは、Firebug で「予期しない文字」エラーをスローします。

于 2013-03-28T09:04:04.860 に答える