2015-04-06 74 views
3

在服務器端我有一個接受一個整數數組,並返回一個JSON對象的方法:是否可以使用GET方法發送數組?

public JsonResult GetCorrespondingOfficers(int[] categories){ 
    //use `categories` 
    return Json(model,JsonRequestBehavior.AllowGet); 
} 

和我有在客戶端上下面的腳本:

 var categories=[1,2,3]; 
     $.ajax({ 
     url: url, 
     type: 'GET', 
     data: { categories: categories }, 
     contentType: 'application/json; charset=UTF-8', 
     dataType: 'json', 
     success: function (data) { alert('Success');}, 
     async: false 
    }); 

當運行上面的代碼我在服務器端的參數categories上得到空值。如果我將方法從GET更改爲POST,那麼它的工作原理。這是否意味着我無法通過GET請求發送數組或任何Json數據?如果不是,那麼我的代碼有什麼問題?

回答

1

您可以將數組作爲一個字符串:

... 
data: { categories: JSON.stringify(categories) }, 
... 
2

GET請求沒有消息體,所以你不能使用contentType: 'application/json; charset=UTF-8' GET。當您在GET請求中使用json時,瀏覽器會打破您的json並將每個josn鍵值添加到url中(即使您使用JSON.stringify方法)。因此,對於使用json和REST,您需要使用POST方法。

+0

我完全失去了理智。就在2天前,我能夠通過GET請求來完成這項工作。現在唯一可行的方法是使用POST方法。更有趣的是,當contentType設置爲「application/json」時,它不起作用 – 2015-04-06 11:45:30

相關問題