2013-05-20 14 views
5

jsonオブジェクトを返すためにajaxを使用するこのjqueryがありますが、私はjsonオブジェクトを返すために使用していますが、jsonファイルをロードしていて、情報をデータベースに照会するcshtmlページ(私がここでやっているように)。 (; contentTypeのように、それは何の動作を変更しません。また、私が試してみました "のcharset = UTF-8のアプリケーション/ JSON")

$.ajax({ 
    url: "/AJAX Pages/Compute_Calendar_Events.cshtml", 
    async: true, 
    type: "GET", 
    dataType: "json", 
    contentType: "application/json", 
    success: function (jsonObj) { 
     console.log("AJAX SUCCESS!"); 
    }, 
    error: function (jqXHR, textStatus, error) { 
     alert("NO AJAX!"); 
    } 
}); 

:ここ

はjQueryのです。物事のカップルを注意することが非常に重要である

@{ 
    Layout = ""; 

    if(IsAjax || 1==1) 
    { 
     string jsonString = "{\"events\":["; 
     string selectQueryString = "SELECT title, summary, eventDate FROM CalendarEvents ORDER BY eventDate ASC"; 
     var db = Database.Open("Content"); 
     foreach (var row in db.Query(selectQueryString)) 
     { 
      jsonString += "{"; 
      jsonString += "\"title\":" + Json.Encode(row.title) + ","; 
      jsonString += "\"dateNumber\":" + Json.Encode(row.eventDate.ToString().Substring(0, row.eventDate.ToString().IndexOf("/"))) + ","; 
      jsonString += "\"dateMonth\":" + Json.Encode(row.eventDate.ToString().Substring(row.eventDate.ToString().IndexOf("/") + 1, row.eventDate.ToString().LastIndexOf("/") - (row.eventDate.ToString().IndexOf("/") + 1))) + ","; 
      jsonString += "\"dateYear\":" + Json.Encode(row.eventDate.ToString().Substring(row.eventDate.ToString().LastIndexOf("/") + 1, 4)) + ","; 
      jsonString += "\"summary\":" + Json.Encode(row.summary); 
      jsonString += "},"; 
     } 
     jsonString = jsonString.TrimEnd(','); 
     jsonString += "]}"; 
     /*System.IO.File.Delete(Server.MapPath("~/TEST.txt")); 
     var outputFile = System.IO.File.AppendText(Server.MapPath("~/TEST.txt")); 
     outputFile.Write(jsonString); 
     outputFile.Close();*/ 
@*  *@@jsonString 
    } 
    else 
    { 
     Response.Redirect("~/"); 
    } 
} 

  1. 私は、サーバー側のエラーを取得していない。ここ

    は、私はAJAXを指すCSHTMLページですまたはエラーコード。

  2. 出力を簡単な.txtファイルに書き込んで内容をテストし、それをjsonLintに貼り付けることで(これはhttp://jsonlint.com/にあります)、これは本当に有効なjson構文であると簡単に判断できました。
  3. 私はまだ、$ .ajax呼び出しの "error:function()"オプションの下でのみ実行される警告メッセージを受け取ります。
  4. jsonString全体の前または後に空白が表示されません(おそらく重要ではない)。
  5. 私はWebMatrix、C#、asp.net-webpages環境にあります。
  6. 私は変更しなければならなかった私の唯一の2疑惑が1です)のdataTypeおよび/またはのcontentTypeが正しく設定されていない、または2)私はJSONのためにAJAXを使用していた最後の時間()は、実際の.jsonファイルをターゲットに"IIS Express"でjsonファイルからデータを受け取れるように設定しましたが、jsonのデータだけでなく、jsonの "ファイル"を解析するために実際にajaxを使用する必要があると思いました。また、私がどこを見ても、私はこのリソースをもう見つけられないようです。
  7. textStatusとエラーパラメータ値は以下のとおりです。textStatus:parsererrorエラー:にSyntaxError:予期しないトークン&が、これは私が自分自身によるJSONの構文は大丈夫チェックアウトすることを知っているので、私の心の中で任意の赤い旗を投げていないようです。

ご協力いただきありがとうございます。私はこの問題を発見したと信じている(予期しないアンパサンドトークンが最終的に電球を私の頭の中に入れた)。私はこのページへの回答を追加しました。それは将来他の人に役立つかもしれない場合です。私がチェックするもう一つは、あなたのJSONということであるWebMatrixの

.cshtmlファイル
@{ 
     Response.AddHeader("Content-Type","application/json"); 
} 

の上部にヘッダーを見出してそれを解決してきた私は、同様の問題、

を持っていた

+0

エラーは、サーバーではなくブラウザでエラーが発生したことを示します。 – Barmar

+0

'contentType'は内容がないので' type: "GET" 'とは無関係です(' contentType'はフォームの値を参照し、 'dataType'はレスポンスを参照します)。 – Barmar

+0

Json.Writeを使用してJSONを生成する必要があります。 'Json.Write(db.Query(selectQueryString)、Response.Output)' –

答えて

1

であなたのJSONをつかむことができ、サンプルコードで、問題は(従って、それらの&...; HTMLエンコードされた同等物に多くの文字を回す)かみそりの自動HTMLエンコーディングの結果として来ました。

@jsonStringを書く代わりに、私は@Html.Raw(jsonString)を書く必要があったので、json構文を歪める可能性のあるそれ以上のエンコードをバイパスしていました。

また、私は、再びあなたの助けみんなのおかげで$.ajax代わりに$.getJSON

を使用していたとしても、それが必要なResponse.AddHeader("Content-Type","application/json");行を追加するために見つけることができませんでした!

+0

サイドノートでは、文字列の連結ではなく、レイザーで文字列全体を構築することができます。あなたはすでにテンプレートエンジンの中にいるので、それを使うかもしれません:) –

+0

@BenjaminGruenbaum私はあなたが何について話しているか分かりません.LOL私は例が大好きです! – VoidKing

+0

@BenjaminGruenbaum実際、私はこの代替案からどのように私が利益を得られるのか分かりません。 – VoidKing

2

検証をパスします。コピー - あなたのJSON結果をJSONバリデーターに貼り付け、それが確実に通過することを確認します。 (あなたはすでにそれをしました、私はこの質問の将来の読者にこれを見てほしいです)。ここで

はあなたが私のために

$.getJSON("/AJAX Pages/Compute_Calendar_Events.cshtml").done(function(result){ 
    alert("Success!"); 
    console.log(result); 
}).fail(function(){ 
    alert("Error loading"); 
}); 
+0

私が述べたように、json構文が有効であることを保証するためにJSONLintを使用しました。 – VoidKing

+0

私は今あなたの答えを試しています。 – VoidKing

+0

'$ .getJSON'は自動的にJSONコンテンツタイプとみなされますが、ヘッダーは気にしません。 – Barmar

関連する問題