2012-02-17 5 views
1

私はajaxリクエストを行う2つの基本的なテストアプリケーションがあります。最初のリクエストでajaxリクエストを呼び出した後、値を取得する前にのajax data.responseTextを解析する必要があります。 2番目の場合、私はに直接アクセスすることができますなぜ時々私はparseJSONをしなければならなかったのですか?

最初のアプリのコード:

@using (Ajax.BeginForm("JsonAdd", "People", new AjaxOptions { OnComplete = "JsonAdd_OnComplete" })) 
{ 
... 
} 

function JsonAdd_OnComplete(data) { 

    var json = $.parseJSON(data.responseText); 

    if (json.Success) { 
     $("#PersonList").html(json.PartialViewHtml); 
    } 

    $("#addPersonModal").slideToggle(); 
    $("#message").html(json.Message); 
} 

あなたが見ることができるように、私は値を取得する前に最初のdata.responseTextを解析する必要があります。私が直接アクセス値を、CAS、この1のために

@using (Ajax.BeginForm("_NewPersonToKeepInformed", "General", new { id = "NewPersonToKeepInformed" }, new AjaxOptions { Confirm = "Are you sure ?", HttpMethod = "POST", OnSuccess = "AddedSuccess" })) 

function AddedSuccess(response) { 
    alert(response.message); 
} 

は、ここで第二のアプリです。

UPDATE

は、ここに私のコントローラのアクションメソッドさ:

public JsonResult JsonAdd(AddPersonViewModel AddPersonModel) 
    { 
     ... 
     return Json(new 
     { 
      Success = true, 
      Message = "The person has been added!" 
     }); 
    } 

ここでは、第1次のとおりです。

public JsonResult _NewPersonToKeepInformed(NewPersonToKeepInformedViewModel viewModel) 
    { 
     ... 
     // return newly added person in a Json object 
     return Json(new { message = "Ajout effectué", firstName = viewModel.FirstName, lastName = viewModel.LastName, phone = viewModel.Phone, mail = viewModel.Mail }); 
    } 

なぜ?

ありがとうございました。

+0

「@使用する」構文とは何ですか? 'Ajax'オブジェクトはどこから来ますか? –

+0

これはASP.NET MVCの構文です。 Ajaxオブジェクトがそこから来ています。 – Bronzato

+0

return Json(新しい { 成功=真、 メッセージ= "人が追加されました!" }); – Bronzato

答えて

6

最初のケースではOnCompleteを使用し、2番目ではOnSuccessを使用します。それは違いです。それらはjQueryのcompletesuccessコールバックに対応しています。 jQueryは、completeコールバック内のContent-Typeヘッダーに基づいてサーバーの応答を解析しません。そのため、手動で解析する必要があります。 successコールバックでは、これは自動的に行われます。したがって、最初のアクションでこれを動作させたい場合は、new AjaxOptions { OnComplete = "JsonAdd_OnComplete" }new AjaxOptions { OnSuccess = "JsonAdd_OnComplete" }と置き換えてください。

+0

ありがとうございます。 – Bronzato

関連する問題