2009-08-31 10 views
1

私のmvcアプリケーションでjqueryのajaxメソッドを使用してフォームを送信しようとしています。 dataTypeをjsonに、contentTypeを "application/json; charset = utf-8"に設定しました。私のコントローラのアクションでは、私はJsonResultを返しています。.NET/MVC保存するダイアログボックスがJSON応答で開きます

何らかの理由で、JSON応答が正しく処理されず、その代わりにJSONオブジェクトを含むファイルを保存するダイアログボックスが表示されます。私のコントローラのアクションで

$(document).ready(function() { 

    $("#editPageContentForm").submit(function() { 

     $.ajax(
    { 
     type: "POST", 
     dataType: "json", 
     url: $("#editPageContentForm").attr("action"), 
     contentType: "application/json; charset=utf-8", 
     data: { ID: $("#id").val(), small_title: $("#small_title").val(), big_title: $("#big_title").val(), body: $("#body").val(), subheading: $("#subheading").val() }, 

     success: function(result) { 
      alert('hi'); 
     }, 

     error: function(req, status, error) { 
      alert("Sorry! We could not receive your feedback at this time."); 
     } 
    } 
); 
}) 

、私は何かに似てい:なぜ応答はJSONとして戻って来ていません

public JsonResult Edit(int id, string small_title, string big_title, string subheading, string body) 
{ 
    return Json(new {success = true, message = "success"}); 
} 

を?

答えて

-1

サーバー上にMIMEタイプが正しく設定されていますか?

3

です。これはJSONとして戻ってきます。しかし、フォーム提出でこれをやっているので、ブラウザはHTMLを期待しています。ブラウザはJSONを視覚的にレンダリングする方法を知らないので、代わりに保存するように促します。ブラウザがPOSTしたときにフォームのページがアンロードされたため、この時点でjQueryコードは実行されていないことに注意してください。

それはあなたが意図し何を完全には明らかではないのですが、あなたは完全に置き換えたい場合は非AJAXをして提出するAJAXのみの提出のために、コードを変更してみてください:

$("#editPageContentForm").submit(function(event) { 
    event.preventDefault(); 
    $.ajax(
    { 
     type: "POST", 
     dataType: "json", 
     url: $("#editPageContentForm").attr("action"), 
     contentType: "application/json; charset=utf-8", 
     data: { ID: $("#id").val(), small_title: $("#small_title").val(), big_title:  
     $("#big_title").val(), body: $("#body").val(), subheading: 
     $("#subheading").val() }, 
     success: function(result) { 
      alert('hi'); 
     }, 
     error: function(req, status, error) { 
      alert("Sorry! We could not receive your feedback at this time."); 
     } 
    }); 
2

return false;を投げて試してみてくださいあなたの$("#editPageContentForm").submit()機能の最後。

+0

はい、それは私のために働いた! – Nima

+1

それはなぜうまくいくのでしょうか? – SoftwareSavant

1

理由は分かりませんが、this topicでは、JsonResultのContentTypeプロパティを "application/json; charset = utf-8"に設定するだけで同様の問題は解決しました。

-1

これはブラウザの問題で、JsonResultの問題ではないようです。私はFireFoxで同じ動作を見たことがあるが、IEではそうではない。

0

私は同じ問題を抱え、blog post about it with more detailsと書いています。とにかく、ここで重要なビットです:。

Internet Explorerが応答 ヘッダのContent-Typeがために特別に 『text/htmlの』 にコンテンツタイプを設定する「アプリケーション/ JSON」だったことを好きではなかったですJSON 応答を返す前に.asxhハンドラでIEのトリックをした。それは今、すべてのブラウザ間で期待通りに動作します。

だから、応答のContentTypeをを変更してみてください。私の場合は

0

、ちょうど私コントロールの行動からの復帰JsonResultの代わりにContentResultを使用します。

public ContentResult FileImportation(HttpPostedFileBase file) 
    { 
     return base.Content(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true, message = "my message" })); 
    } 

あなたが見ることができるように、私は私のオブジェクトをシリアル化するNewtonsoft.Jsonを使用していますがAsp.Net MVCフレームワークに組み込まれJson.Convertを使用することができます。

次に、私のJavaScriptコードでは、サーバーの結果で$ .parseJSONを呼び出す必要があります。

onSuccess: function (result) { 
     result = $.parseJSON(result); 

     if (result.success) { 
     alert(result.message); 
     } 
     else { 
     alert("..."); 
     } 
    } 

これだけです!'contentType: "text/html"のような' option 'オブジェクトのadditionalnalパラメータはありません。

私はまだHTTPリクエストを解読するプロではなく、オプションで 'contentType'を指定すると何か変わってしまいますが、私にとってはうまくいきません。

これは、Internet Explorerに関連するxxxxxのバグを検索するために失われた2時間のことです。

関連する問題