2012-02-09 72 views
4

我想用jQuery.parseJSON解析出MVC3控制器操作的返回值。jQuery.parseJSON不適用於來自MVC控制器操作的JsonResult

控制器:

[HttpPost] 
    public JsonResult LogOn(LogOnModel model, string returnUrl) 
    { 
     .. do stuff .. 

     if (errors.Count() < 0) 
     { 
      return Json(new object[] { true, model, errors }); 

     } 

     return Json(new object[] { false, model, errors }); 
    } 

的jQuery:

$.ajax({ 
       url: form.attr('action'), 
       type: "POST", 
       dataType: "json", 
       data: form.serialize(), 
       success: function (data) { 
        var test = jQuery.parseJSON(data);      
       } 
      }); 
從提琴手

JSON結果:

內容類型:應用/ JSON; charset = utf-8

[false,{「UserName」:「1」,「Password」:「2」,「RememberMe」:false},[{「Key」:「」,「Errors」 { 「異常」:空 「的ErrorMessage」: 「提供的 用戶名或密碼不正確。」}]}]]

提琴手可以解析的結果:

enter image description here

的調用jQuery.parseJSON返回null。 我的問題是,我如何解析json返回值到一個對象?

謝謝!

回答

6

您不需要在您的成功處理程序中調用parseJSON,因爲ajax已經將JSON結果(因爲您指定了dataType:'json'而自動執行此操作)解析到您的數組中。但是,我建議返回某種結果對象(無論是在C#中創建實際的類還是使用匿名類型)。

[HttpPost] 
    public JsonResult LogOn(LogOnModel model, string returnUrl) 
    { 
     .. do stuff .. 

     if (errors.Count() < 0) 
     { 
      return Json(new { success=true, model, errors }); 

     } 

     return Json(new { success=false, model, errors }); 
    } 

,並在客戶端

$.ajax({ 
       url: form.attr('action'), 
       type: "POST", 
       dataType: "json", 
       data: form.serialize(), 
       success: function (result) { 
        alert(result.success); 
        // also have result.model and result.errors      
       } 
      }); 
+0

jQuery.parseJSON調用仍然返回null。 – rboarman 2012-02-09 00:46:30

+0

啊......你不需要parseJSON,因爲'data'已經是一個對象了。 'ajax'將嘗試解析JSON結果,因爲您將類型dataType指定爲json。 parseJSON需要一個字符串,你給它一個對象,因此返回null。我沒有仔細注意你的問題,對不起。我會修改。 – HackedByChinese 2012-02-09 00:50:14

+0

我明白了;讓我玩這一點。 – rboarman 2012-02-09 00:52:45

2

你實際上是返回對象的數組,他們shoould這樣的成功函數訪問:

var booleanValue = data[0]; 

var yourModel = data[1]; 

var yourErrors = data[2]; 

我沒有給@HackedByChinese因爲命名這些屬性可能是一個更好的方式來進行最終的投票。 Howvbere這將解決你的眼前的問題。

+0

我試過這些變化;沒愛。 – rboarman 2012-02-09 00:42:55

+0

@rboarman hmmmm ...這是在你的成功方法中閱讀你的JsonResult Json(new object [] {false,model,errors})的正確語法。也許這個表單有問題。爲什麼不嘗試將'$ .ajax()'調用改爲簡單的GET,而不是一次一步地解決問題。 – Craig 2012-02-09 00:55:06

+0

@rboarman我對你有個猜測......在'$ .ajax()'調用中使用的'form'變量實際上是否存在?也許你有一個你沒注意到的JS錯誤。你能否確定你已經在獲得文檔中的第一個表單的'$ .ajax()'調用之前聲明瞭'var form = $(「form:first」);''。 – Craig 2012-02-09 01:01:38

相關問題