如何在$ 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"}), // ... });