2015-04-06 71 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

相关问题