Jquery 在Querystring中使用Ajax和常规参数发送JSON
是否可以使用Ajax GET在querystring的末尾包含一个简单的JSON字符串?我正在使用MVC并从视图发送到控制器。在控制器中,我希望能够执行以下操作:Jquery 在Querystring中使用Ajax和常规参数发送JSON,jquery,ajax,asp.net-mvc,json,Jquery,Ajax,Asp.net Mvc,Json,是否可以使用Ajax GET在querystring的末尾包含一个简单的JSON字符串?我正在使用MVC并从视图发送到控制器。在控制器中,我希望能够执行以下操作: public class myObj { public string Name { get; set; } public int Age { get; set; } } [AcceptVerbs(HttpVerbs.Get)] public JsonResult GetData(string Id) { //
public class myObj
{
public string Name { get; set; }
public int Age { get; set; }
}
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult GetData(string Id)
{
// Get querystring parameter
string a = Request["a"];
// Create typed object
if (Request["myObj"] != null)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
myObj myobj = null;
myobj = jss.Deserialize<myObj>(Request["myObj"]);
}
...
}
我不认为我上面的例子说明了我为什么要这样做,但我的问题是这是否可能。当执行Ajax GET时,myObj在控制器中始终为null。我怀疑这是因为data:
已经在创建一个JSON,而myObj的格式不正确,但我不知道如何解决这个问题,似乎也找不到一个示例来说明如何解决这个问题
如果这种组合是可能的,有人能告诉我我的代码哪里错了吗?由于要传递的数据量(12个参数)可能包含大量数据,您可能希望使用POST而不是GET 并确保您的操作接受HTTP POST谓词
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult GetData(string id, string a, myObj myObj)
{
}
有关更多信息,请参阅。使用查询字符串传递数据时,我会非常小心。试着改用POST,你就不必担心查询字符串的限制了。我还没有弄清楚如何在不重新加载视图的情况下使用POST,所以我开始使用GET。你可以很容易地更改答案中的属性,即你必须是POST,然后做完全相同的事情。不同之处在于POST中请求的大小可能会大得多。如果进行异步调用,即使视图使用POST,也不应重新加载视图。你是如何实现这个功能的?丹尼尔,我对你的建议很感兴趣,让这篇文章成为一篇博文而不是GET。我不喜欢URL中凌乱的查询字符串参数。我不确定您询问的是哪个函数实现。似乎每次发布POST时都会调用视图的关联控制器操作。我看到你提供了一个链接。我现在就去读。我更愿意发布帖子……丹尼尔,我花了相当多的时间试图让帖子在没有重新加载视图的情况下运行。我放弃了,选择了GET。我再试了一次,它似乎工作得很好-在Ajax中更改
类型:POST
,并用HttpVerbs.POST
装饰控制器函数。我不知道为什么它以前不起作用,但是谢谢你鼓励我再试一次。这是一个更好的解决方案。我很高兴能帮上忙!
var myObj= { "Name" : "John", "Age" : "22" }; //Array with similar properties to your Model
$.ajax({
url : "/GetData/",
type: "POST",
data : myObj,
success: function(data, textStatus, jqXHR)
{
//data - response from server
},
error: function (jqXHR, textStatus, errorThrown)
{
}
});
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult GetData(string id, string a, myObj myObj)
{
}