【问题标题】:How to pass parameters in $ajax POST?如何在 $ajax POST 中传递参数?
【发布时间】:2013-09-09 11:18:02
【问题描述】:

我已按照this 链接中所述的教程进行操作。在下面的代码中,由于某种原因,数据没有作为参数附加到 url,但是如果我使用 /?field1="hello" 将它们直接设置到 url,它就可以工作。

$.ajax({
        url: 'superman',
        type: 'POST',
        data: { field1: "hello", field2 : "hello2"} ,
        contentType: 'application/json; charset=utf-8',
        success: function (response) {
            alert(response.status);
        },
        error: function () {
            alert("error");
        }
    }); 

【问题讨论】:

  • 如果您正在寻找要附加到 URL 的参数,您需要将类型更改为“GET”。 'POST' 将改为在 HTTP 标头中传递参数。

标签: jquery ajax


【解决方案1】:

对于简单的情况,我建议您使用 jQuery 的 $.post$.get 语法:

$.post('superman', { field1: "hello", field2 : "hello2"}, 
    function(returnedData){
         console.log(returnedData);
});

如果您需要捕获失败案例,只需执行以下操作:

$.post('superman', { field1: "hello", field2 : "hello2"}, 
    function(returnedData){
         console.log(returnedData);
}).fail(function(){
      console.log("error");
});

另外,如果你总是发送一个 JSON 字符串,你可以使用$.getJSON 或 $.post,最后再加一个参数。

$.post('superman', { field1: "hello", field2 : "hello2"}, 
     function(returnedData){
        console.log(returnedData);
}, 'json');

【讨论】:

  • 较新版本的 jQuery 支持在 $.post 和 $.get 上“挂起”done()、fail() 或 always() 处理程序。见:api.jquery.com/jQuery.post
  • 什么是field1:,什么是"hello"? JS 还是 PHP 中的变量?
  • field1 和 field2 是 POST 变量。 Hello 和 Hello2 是它们的值。
【解决方案2】:

Jquery.ajax 不会像 GET 数据那样自动为您编码 POST 数据。 Jquery 希望您的数据被预先格式化以附加到请求正文中,以便直接通过网络发送。

一种解决方案是使用jQuery.param 函数来构建大多数处理POST 请求的脚本所期望的查询字符串。

$.ajax({
    url: 'superman',
    type: 'POST',
    data: jQuery.param({ field1: "hello", field2 : "hello2"}) ,
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    success: function (response) {
        alert(response.status);
    },
    error: function () {
        alert("error");
    }
}); 

在这种情况下,param 方法将数据格式化为:

field1=hello&field2=hello2

Jquery.ajax 文档说有一个名为processData 的标志控制此编码是否自动完成。文档说它默认为true,但这不是我在使用POST 时观察到的行为。

【讨论】:

  • 我认为这是解释“为什么”的唯一答案。
【解决方案3】:

尝试使用GET方法,

var request = $.ajax({
    url: 'url',
    type: 'GET',
    data: { field1: "hello", field2 : "hello2"} ,
    contentType: 'application/json; charset=utf-8'
});

request.done(function(data) {
      // your success code here
});

request.fail(function(jqXHR, textStatus) {
      // your failure code here
});

您无法使用 POST 方法查看 URL 中的参数。

编辑:

弃用通知: jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 3.0 开始被移除。您可以使用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always() 代替。

【讨论】:

    【解决方案4】:
        function FillData() {
        var param = $("#<%= TextBox1.ClientID %>").val();
        $("#tbDetails").append("<img src='Images/loading.gif'/>");
        $.ajax({
            type: "POST",/*method type*/
            contentType: "application/json; charset=utf-8",
            url: "Default.aspx/BindDatatable",/*Target function that will be return result*/
            data: '{"data":"' + param + '"}',/*parameter pass data is parameter name param is value */
            dataType: "json",
            success: function(data) {
                   alert("Success");
                }
            },
            error: function(result) {
                alert("Error");
            }
        });   
    }
    

    【讨论】:

      【解决方案5】:

      POST request 中,参数在请求正文中发送,这就是您在 URL 中看不到它们的原因。

      如果你想看到它们,改变

          type: 'POST',
      

          type: 'GET',
      

      请注意,浏览器具有开发工具,可让您查看代码发出的完整请求。在 Chrome 中,它位于“网络”面板中。

      【讨论】:

        【解决方案6】:
        $.ajax(
           {
              type: 'post',
              url: 'superman',
              data: { 
                "field1": "hello",
                "field2": "hello1"
              },
              success: function (response) {
                alert("Success !!");
              },
              error: function () {
                alert("Error !!");
              }
           }
        );
        

        type: 'POST',会将 **parameters 附加到请求的正文中,而 @ 987654323@,将参数附加到 可见的 URL。

        大多数流行的网络浏览器都包含显示完整请求的网络面板。

        在网络面板中选择 XHR 以查看 请求

        这也可以通过this来完成。

        $.post('superman',
              { 
                'field1': 'hello', 
                'field2': 'hello1'
              },
              function (response) {
                alert("Success !");
              }
            );
        

        【讨论】:

          【解决方案7】:

          您可以使用 $.ajax 或 $.post 来实现

          使用 $.ajax :

              $.ajax({
                type: 'post',
                url: 'superman',
                data: { 
                  'field1': 'hello', 
                  'field2': 'hello1'
                },
                success: function (response) {
                  alert(response.status);
                },
                error: function () {
                  alert("error");
                }
             });
          

          使用 $.post :

              $.post('superman',
                { 
                  'field1': 'hello', 
                  'field2': 'hello1'
                },
                function (response, status) {
                  alert(response.status);
                }
              );
          

          【讨论】:

          • 非常感谢 - 它的工作。不过,如果您可以添加一个调用函数来获取 post 参数的示例,那就太好了。谢谢! :)
          【解决方案8】:

          您的代码是正确的,只是您没有将 JSON 键作为字符串传递。

          它应该有双引号或单引号

          { "field1": "hello", "field2" : "hello2"}

          $.ajax(
             {
                type: 'post',
                url: 'superman',
                data: { 
                  "field1": "hello", // Quotes were missing
                  "field2": "hello1" // Here also
                },
                success: function (response) {
                  alert(response);
                },
                error: function () {
                  alert("error");
                }
             }
          );
          

          【讨论】:

            【解决方案9】:
            function funcion(y) {
            $.ajax({
               type: 'POST',
               url: '/ruta',
               data: {"x": y},
               contentType: "application/x-www-form-urlencoded;charset=utf8",
            });
            }
            

            【讨论】:

              【解决方案10】:

              我知道这个答案太晚了

              您还可以使用 FormData 将数据传递到 $.ajax({})

              let formData =  new FormData()
              formData.append('data1', "Hello")
              formData.append('data2', "World")
              
              $.ajax({
                 url: '/',
                 type: 'POST',
                 data: formData,
                 contentType: false,
                 processData: false,
                 cache: false,
                 success: function(v){
                     console.log(v)
                 }
              })
              

              【讨论】:

                【解决方案11】:

                对于在POST 方法中的 url 中发送参数您可以像这样简单地将其附加到 url:

                $.ajax({
                    type: 'POST',
                    url: 'superman?' + jQuery.param({ f1: "hello1", f2 : "hello2"}),
                    // ...
                }); 
                

                【讨论】:

                • 如果提问者只是想通过 POST 发送一些参数,其他答案会更合适,因为那会更标准。该问题明确提到了 POST 和 URL 参数。 (例如,我发现了这个问题,因为我必须将 URL 参数与正文中的参数一起设置,并且我想以比连接字符串更好的方式来做这件事。)@user4127 接受这个作为答案,或者请重新表述你的问题。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-10-26
                • 1970-01-01
                • 1970-01-01
                • 2016-07-11
                • 2019-05-25
                • 2019-09-15
                • 1970-01-01
                相关资源
                最近更新 更多