Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 构造ajax数据参数的不同方法?_Javascript_Jquery_Asp.net_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript 构造ajax数据参数的不同方法?

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) { . . .

我对使用ASP.NETMVC和Webform构建ajax的数据参数感到非常困惑,需要stackoverflow社区的解释

第一个场景(使用MVC在ajax中将javascript对象文本作为数据参数传递)的结果是:成功了

MVC控制器

    [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(内部服务器错误)

问题:

  • 为什么?

  • 在jQuery的ajax上工作的场景是否也能在其他javascript框架上工作,比如angularJS的$http服务

  • 我还看到了internet上使用“=”构建其ajax数据参数的一些场景示例:

    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
    
  • 除了上述场景之外,还有谁能展示更多构造ajax数据参数的方法吗?如果有人也能展示最有说服力的构造数据参数的方法,我们将不胜感激

  • 没有接受者?

    关于jQuery的ajax
    data
    的文档说明了这一点:

    数据类型:要发送到 服务器。如果尚未转换为字符串,则会将其转换为查询字符串。 它被附加到GET请求的url。请参见processData选项,以了解更多信息 防止这种自动处理。对象必须是键/值对。如果 值是一个数组,jQuery使用相同的键序列化多个值 基于传统设置的值(如下所述)

    因此,您可以传递字符串、aray或普通对象,而在Angulars
    data
    中,您只能传递字符串对象

    $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上试过了。我的问题有什么答案吗?从一般意义上说,这可能是个好主意,但根本不能回答问题。仍在等待回答。考虑到我的测试场景,情况似乎并非如此。尽管如果有人能指出为什么它不起作用的错误,这会很有帮助。