2012-06-13 11 views
9

これはMVC3アプリケーションです。私は自分の行動を次のJavaScriptの呼び出しがあります。MVCアクションへのJQuery ajax呼び出しは、エラーがない場合に常にエラーを返します

function editDescription(docId,fileName, fileDescription) { 
    $.ajax({ 
     type: "POST", 
     url: "/OrderDetail/LoadModelData", 
     contentType: "application/json; charset=utf-8", 
     data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}", 
     dataType: "json", 
     success: function (result) { 
     alert("ok: "+ result.d); 
     }, 
     error: function (result) { 
      alert('Oh no: '+ result.responseText); 
     } 
    }); 

HERESに私のアクション:

[HttpPost] 
    public string LoadModelData(string id, string filename, string description) 
    { 
     return filename; 
    } 

私は、コードを実行し、アクションがパラメータで呼び出される、何がnullではありませんが、誤差関数を取得します毎回呼ばれる。だから、「ああ」という警告ボックスが毎回表示されますが、アクションから返される文字列は正しいです。ファイル名がtest.pdfの場合、エラーアラートボックスには

'Oh No: test.pdf'. 

と書かれていますが、エラーはありません。エラーがないのに成功機能が呼び出されないのはなぜですか?

+0

ファイル名。それはそれが何をするのかをしている。エラー関数が呼び出され続け、遅かれ早かれ実際のエラーが発生します – BoundForGlory

答えて

11

アクションメソッドからstringの値が返されることを期待しています。なぜデータ型をjsonと指定する必要がありますか?それを取り除き、何が起こるかを見てください。また、応答のないdのプロパティがありません!アラートの結果を使用してください。

$.ajax({ 
     type: "POST", 
     url: "/OrderDetail/LoadModelData", 
     contentType:"application/json; charset=utf-8",   
     data: JSON.stringify({ 
          id: docId, 
          filename: fileName, 
          description: fileDescription 
          }), 
     success: function (result) { 
     alert("ok: "+ result); 
     }, 
     error: function (result) { 
      alert('Oh no: '+ result.responseText); 
     } 
    }); 

datatypeプロパティは、クライアントが戻って、結果として期待されているコンテンツの種類をサーバーに指示します。

EDIT: Darinが述べたように、JSON.stringifyメソッドを使用してJSONリクエストを作成してください。将来の訪問者のための正しい方法を含めるために、この回答を更新してください。

+0

これは...ありがとうございました。ありがとうございました – BoundForGlory

+0

@ user1202717:ようこそ。お役に立てて嬉しいです。 :) – Shyju

+1

-1は、ajaxリクエストにハードコードされたJSON文字列を残します。 –

8

文字列操作でJSONを構築することはありません:絶対に恐ろしいと間違っ

data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}", 

。あなたは何もエンコーディングしていません。 descriptionで引用符を入れてください。すべてが破損します。 JSONこのよう

操作するときは、必ずJSONパーサーを使用します。

$.ajax({ 
    type: "POST", 
    url: "/OrderDetail/LoadModelData", 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify({ 
     id: docId, 
     filename: fileName, 
     description: fileDescription 
    }), 
    success: function (result) { 
     alert("ok: "+ result.filename); 
    }, 
    error: function (result) { 
     alert('Oh no: '+ result.responseText); 
    } 
}); 

JSON.stringify方法は、ネイティブにビルトインされて近代的なブラウザ。レガシーブラウザをサポートする必要がある場合は、json2.jsスクリプトを含めることができます

もう1つの間違いは、コントローラアクションシグネチャです。 ASP.NET MVCコントローラのアクションでは、文字列ではなくActionResultsを返さなければなりません。

+0

JsonResultは何を返すのですか? – PositiveGuy

+0

@CoffeeAddict、どうですか? –

関連する問題