151

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

$.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");
        }
    }); 
4

11 回答 11

143

我建议您在简单的情况下使用 jQuery的$.postor语法:$.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');
于 2013-09-09T11:23:49.893 回答
61

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使用时观察到的行为。

于 2016-02-24T00:02:23.373 回答
59

尝试使用 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()。

于 2013-09-09T12:06:05.173 回答
18
    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");
        }
    });   
}
于 2013-12-15T11:35:44.267 回答
11

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

如果你想看到他们,改变

    type: 'POST',

    type: 'GET',

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

于 2013-09-09T11:18:49.747 回答
8
$.ajax(
   {
      type: 'post',
      url: 'superman',
      data: { 
        "field1": "hello",
        "field2": "hello1"
      },
      success: function (response) {
        alert("Success !!");
      },
      error: function () {
        alert("Error !!");
      }
   }
);

type: 'POST', 将 **parameters附加到URL中看不到的请求的主体**而 , 将参数附加到可见的URL 。type: 'GET'

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

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

这也可以通过这个来完成。

$.post('superman',
      { 
        'field1': 'hello', 
        'field2': 'hello1'
      },
      function (response) {
        alert("Success !");
      }
    );
于 2018-03-30T09:52:29.680 回答
6

您可以使用 $.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);
      }
    );
于 2016-01-13T05:33:12.837 回答
3

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

它应该有双引号或单引号

{“field1”:“你好”,“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");
      }
   }
);
于 2017-02-10T05:34:51.737 回答
2
function funcion(y) {
$.ajax({
   type: 'POST',
   url: '/ruta',
   data: {"x": y},
   contentType: "application/x-www-form-urlencoded;charset=utf8",
});
}
于 2021-01-05T15:59:10.757 回答
2

我知道这个答案太晚了

您还可以使用 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)
   }
})
于 2021-04-15T04:21:09.770 回答
0

对于POST方法中 url 中的发送参数,您可以简单地将其附加到 url,如下所示:

$.ajax({
    type: 'POST',
    url: 'superman?' + jQuery.param({ f1: "hello1", f2 : "hello2"}),
    // ...
}); 
于 2017-05-30T09:17:35.397 回答