2016-06-14 4 views
0

私は基本的なASP.NET & AJAX/JSONの割り当てに取り組んでいます。私はそれを動作させることに不満を持っています。要件の1つは、SQL DBデータの操作を行うAJAX/JSONメソッドを作成することでした。 ASPXで200 OKステータスにもかかわらずAJAX JSONレスポンスが失敗するのはなぜですか?

はそれを完了するために、私は次のコードを使用した「retrieve.aspx」ページ(JSON用のデータを作成するコードの一部に

$.ajax({ 
       type: "GET", 
       dataType: "json", 
       url: "Retrieve",  
       success: function (data) { 
        alert(data); 
        var col; 
        for (col in data) { 
         alert(col); 
         addRow(data[col].id, data[col].Name, data[col].catagory, data[col].difficulty, data[col].company, data[col].price, '#products'); 
        } 
       }, 
       error: function() { 
        alert("1"); 

       } 

):私は、テキストにデータ型を変更しようとした場合

Response.ContentType = "application/json; charset=utf-8"; 
      bool val1 = (System.Web.HttpContext.Current.User != null) && System.Web.HttpContext.Current.User.Identity.IsAuthenticated; 
      string category = Request.QueryString["category"]; 
      //string a = JsonConvert.SerializeObject(getProducts(category)); 
      var a = getProducts(category); 
      // instantiate a serializer 
      JavaScriptSerializer TheSerializer = new JavaScriptSerializer(); 

      var TheJson = TheSerializer.Serialize(a); 
      Response.Write(TheJson); 

そして最後にではなく、少なくとも、それはコンテンツが一緒にHTMLページのコードでJSON構造化テキストであることを示します。

私はここで何が欠けていますか?

答えて

1

レスポンスに入れたjsonコンテンツの外にASP.NETが何かをレンダリングしないようにする必要があります。

Response.Clear(); 
Response.ContentType = "application/json; charset=utf-8"; 
... 

をし、最後にすぐに応答を完了します:これを行うには、事前にレスポンスをクリア

Response.Write(TheJson); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

CompleteRequestがより広範囲Request.End()の代わりに、ここで使用されるべき理由をthis excellent answerを参照してください。

JSONを出力するためにページを使用するのはオーバーヘッドのようです。同じことを行う簡単な方法、つまりHTTPハンドラをチェックアウトすることができます。インターネット上の多くの例がここにあります。one

+0

「Response.End」は通常、他の方法で修正できる問題に対する悪い回避策です。ハードには、スレッドの中断を内部的に行うことによって要求が終了します。 [ドキュメント](https://msdn.microsoft.com/en-us/library/system.web.httpresponse.end(v = vs.110).aspx)にも:_ "このメソッドは互換性のためにのみ提供されていますASPで "_ –

+1

@JamesThorpe、本当に、指摘してくれてありがとう。少し研究し、より多くのことを学んだ、より良い選択肢で更新された答え – Andrei

+0

それが私が大好きな理由です - 誰もが学ぶことができます:) –

関連する問題