Javascript 构造ajax数据参数的不同方法?
我对使用ASP.NETMVC和Webform构建ajax的数据参数感到非常困惑,需要stackoverflow社区的解释 第一个场景(使用MVC在ajax中将javascript对象文本作为数据参数传递)的结果是:成功了 MVC控制器Javascript 构造ajax数据参数的不同方法?,javascript,jquery,asp.net,ajax,asp.net-mvc,Javascript,Jquery,Asp.net,Ajax,Asp.net Mvc,我对使用ASP.NETMVC和Webform构建ajax的数据参数感到非常困惑,需要stackoverflow社区的解释 第一个场景(使用MVC在ajax中将javascript对象文本作为数据参数传递)的结果是:成功了 MVC控制器 [HttpPost] public JsonResult Register(string Name, string Birthday, int Gender) { . . .
[HttpPost]
public JsonResult Register(string Name, string Birthday, int Gender)
{
.
.
.
return Json(message);
}
Javascript代码:
$.ajax({
url: "/Test/Register",
method: "POST",
dataType: "json",
data: {
Name:name,
Birthday:birthday,
Gender:gender
}
}).success(function (response) {
alert(response);
}).error(function (response) {
alert(response);
});
var name = $('#Name').val();
var birthday = $('#Birthday').val();
var gender = $('#Gender').val();
var data = "{ Name:'" + name + "', Birthday:'" + birthday + "', Gender:'" + gender + "'}";
$.ajax({
url: "/Test/Register",
method: "POST",
dataType: "json",
data: data,
}).success(function (response) {
alert(response);
}).error(function (response) {
alert(response);
});
var name = $("#Name").val();
var salary = $("#Salary").val();
var data = "{ Name:'" + name + "', Salary:'" + salary + "'}";
$.ajax({
url: '/WebForm3.aspx/Submit',
contentType: "application/json; charset=utf-8",
method: 'POST',
data: data,
dataType: 'json',
success: function (response)
{
console.log(response);
},
error: function (response)
{
console.log(response);
}
});
第二个场景(使用MVC在ajax中将javascript对象文本作为字符串作为数据参数传递)结果:导致错误500(内部服务器错误)
Javascript代码:
$.ajax({
url: "/Test/Register",
method: "POST",
dataType: "json",
data: {
Name:name,
Birthday:birthday,
Gender:gender
}
}).success(function (response) {
alert(response);
}).error(function (response) {
alert(response);
});
var name = $('#Name').val();
var birthday = $('#Birthday').val();
var gender = $('#Gender').val();
var data = "{ Name:'" + name + "', Birthday:'" + birthday + "', Gender:'" + gender + "'}";
$.ajax({
url: "/Test/Register",
method: "POST",
dataType: "json",
data: data,
}).success(function (response) {
alert(response);
}).error(function (response) {
alert(response);
});
var name = $("#Name").val();
var salary = $("#Salary").val();
var data = "{ Name:'" + name + "', Salary:'" + salary + "'}";
$.ajax({
url: '/WebForm3.aspx/Submit',
contentType: "application/json; charset=utf-8",
method: 'POST',
data: data,
dataType: 'json',
success: function (response)
{
console.log(response);
},
error: function (response)
{
console.log(response);
}
});
当我在ASP.NET Webforms上测试它时,结果是不同的
第三种场景(使用Webforms在ajax中将javascript对象文本作为字符串作为数据参数传递)的结果是:它起作用了
WebFormWebMethod
[WebMethod]
public static string Submit(string Name, String Salary)
{
return "Success";
}
Javascript代码:
$.ajax({
url: "/Test/Register",
method: "POST",
dataType: "json",
data: {
Name:name,
Birthday:birthday,
Gender:gender
}
}).success(function (response) {
alert(response);
}).error(function (response) {
alert(response);
});
var name = $('#Name').val();
var birthday = $('#Birthday').val();
var gender = $('#Gender').val();
var data = "{ Name:'" + name + "', Birthday:'" + birthday + "', Gender:'" + gender + "'}";
$.ajax({
url: "/Test/Register",
method: "POST",
dataType: "json",
data: data,
}).success(function (response) {
alert(response);
}).error(function (response) {
alert(response);
});
var name = $("#Name").val();
var salary = $("#Salary").val();
var data = "{ Name:'" + name + "', Salary:'" + salary + "'}";
$.ajax({
url: '/WebForm3.aspx/Submit',
contentType: "application/json; charset=utf-8",
method: 'POST',
data: data,
dataType: 'json',
success: function (response)
{
console.log(response);
},
error: function (response)
{
console.log(response);
}
});
第四个场景(使用Webforms在ajax中将javascript对象文本作为数据参数传递)结果:导致错误500(内部服务器错误)
问题:
var reservation = { "CourseCode": courseCode.val().toString(), "Section": section.val().toString(), "DateFrom": dateF.toString(), "DateTo": dateT.toString(), "Schedule": reservations };
$.ajax({
url: '/ReserveSubject',
type: 'POST',
data: 'reservation=' + JSON.stringify(reservation),//Like this
data
的文档说明了这一点:
数据类型:要发送到
服务器。如果尚未转换为字符串,则会将其转换为查询字符串。
它被附加到GET请求的url。请参见processData选项,以了解更多信息
防止这种自动处理。对象必须是键/值对。如果
值是一个数组,jQuery使用相同的键序列化多个值
基于传统设置的值(如下所述)
因此,您可以传递字符串、aray或普通对象,而在Angularsdata
中,您只能传递字符串对象
$http
因此,这与示例中的不同,如果发送数组,则必须进行调整。我建议将控制器操作上的参数数量减少到单个模型对象,如:
public class RegisterModel
{
public string Name {get; set;}
public string Birthday {get; set;}
public int Gender {get; set;}
}
无论如何,这只是干净代码的良好实践
然后在客户端,您可以让模型构建器接收您想要发送的数据,然后发送这个对象,而不是一堆参数如果您使用浏览器的“开发工具”的“网络”选项卡,您可以确切地看到jQuery在每种情况下对您的数据做了什么。也就是说,您可以看到请求主体的格式。(另外,不要忘了注意
$.ajax()
方法的contentType
和dataType
参数之间的区别,后者指定了响应的预期格式。)我知道这一点。我的问题是数据参数。为什么字符串适用于webforms而不是MVC,为什么javascript对象文字适用于MVC而不是webform?那么“=”替换“:”的机制呢?顺便问一下,这对webforms有效吗?我已经在MVC上试过了。我的问题有什么答案吗?从一般意义上说,这可能是个好主意,但根本不能回答问题。仍在等待回答。考虑到我的测试场景,情况似乎并非如此。尽管如果有人能指出为什么它不起作用的错误,这会很有帮助。