如何在$ ajax POST中传递参数?

我已经按照这个链接中所述的教程。 在下面的代码由于某种原因,数据不作为参数追加到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"); } }); 

我build议你在简单情况下使用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"); }); 

此外,如果您始终发送JSONstring,则可以使用$ .getJSON或$ .post,并在最后加上一个参数。

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

尝试使用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中的参数。

编辑:

弃用声明:自jQuery 3.0起,jqXHR.success(),jqXHR.error()和jqXHR.complete()callback被删除。 您可以使用jqXHR.done(),jqXHR.fail()和jqXHR.always()来代替。

Jquery.ajax不会自动为您的POST数据编码方式,它为GET数据。 Jquery期望你的数据被预先形成,以附加到请求主体,直接通过networking发送。

一个解决scheme是使用jQuery.param函数来构build一个处理POST请求所需的大多数脚本的查询string。

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

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

在POST请求中 ,参数在请求的主体中发送,这就是为什么你不在URL中看到它们。

如果你想看到他们,改变

  type: 'POST', 

  type: 'GET', 

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

你可以使用$ .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); } ); 

你的代码是正确的,除非你没有传递JSON键作为string。

它应该有双引号或单引号

{“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"); } } ); 

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

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