2012-04-16 25 views
4

我有一個控制器的方法爲什麼沒有POST參數不會返回JSON

[HttpPost] 
public ActionResult GetUserData() 
{ 
    return Json(GetCurrentUser()); 
} 

我叫它$。阿賈克斯()通過這樣的方法:

ServerCall: function (method, args, callback) { 
     $.ajax({ 
      type: 'POST', 
      url: method, 
      data: JSON.stringify(args), 
      contentType: 'application/json;charset=utf8', 
      dataType: 'json', 
      success: function (result) { 
       if (callback) { 
        callback(result); 
       } 
      }, 
      error: function (err) { 
      } 
     }); 
    } 

與呼叫是:

ServerCall('GetUserData', null, function(data){ 
}); 

正因爲如此,當我做這樣的判斷,$就返回成功,但「數據」爲空。調試,responseText是空的。在服務器端,GetUserData被調用,並且它返回一個正確格式化的Json對象(我​​已經創建了我自己的JSON ActionResult並驗證數據確實正在寫入響應流。

If我添加一個虛擬參數到服務器端方法:

[HttpPost] 
public ActionResult GetUserData(string temp) 
{ 
    return Json(GetCurrentUser)); 
} 

一切完美瀏覽器是IE8我的問題是,任何人都可以解釋爲什麼這種情況正在發生

更新:?

注意解決方法解決方案如下:我會的仍然有興趣瞭解根本原因。

回答

4

我能夠在IE8中使用達林的代碼進行復制。雖然我不知道根本原因,但我認爲它與IE8 JSON.stringify如何處理null有關。更改

data: JSON.stringify(args) 

data: args ? JSON.stringify(args) : null 

解決了這一問題。

請注意,問題是間歇性的 - 我每十個電話中就有一個出現故障。隨着變化,超過100次測試,失敗率爲零。

+0

在IE9中仍然存在問題 – 2013-02-21 23:50:16

4

無再現。

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult GetUserData() 
    { 
     return Json(new { foo = "bar" }); 
    } 
} 

Index.cshtml視圖:

<script type="text/javascript"> 
    var serverCall = function (method, args, callback) { 
     $.ajax({ 
      type: 'POST', 
      url: method, 
      data: JSON.stringify(args), 
      contentType: 'application/json;charset=utf8', 
      dataType: 'json', 
      success: function (result) { 
       if (callback) { 
        callback(result); 
       } 
      }, 
      error: function (err) { 
      } 
     }); 
    }; 

    serverCall('@Url.Action("GetUserData")', null, function (data) { 
     alert(data.foo); 
    }); 
</script> 

結果:'bar'被警告(如預期)。

+0

感謝您抽出寶貴的時間。出於好奇,你在測試什麼瀏覽器?我應該在我的末端指定IE8 – 2012-04-16 14:17:06

相關問題