302

我应该如何在 jQuery Ajax 请求中传递查询字符串值?我目前按如下方式进行操作,但我确信有一种更简洁的方式不需要我手动编码。

$.ajax({
    url: "ajax.aspx?ajaxid=4&UserID=" + UserID + "&EmailAddress=" + encodeURIComponent(EmailAddress),
    success: function(response) {
        //Do Something
    },
    error: function(xhr) {
        //Do Something to handle error
    }
});

我已经看到查询字符串参数作为数组传递的示例,但是我看到的这些示例不使用$.ajax()模型,而是直接转到$.get(). 例如:

$.get("ajax.aspx", { UserID: UserID , EmailAddress: EmailAddress } );

我更喜欢使用 $.ajax() 格式,因为这是我习惯的(没有特别好的理由 - 只是个人喜好)。

编辑 09/04/2013:

在我的问题被关闭(作为“过于本地化”)之后,我发现了一个相关的(相同的)问题 - 有 3 个赞成票(我一开始没有找到它是我的坏事):

使用 jquery 进行 POST,如何正确提供 'data' 参数?

这完美地回答了我的问题,我发现这样做更容易阅读并且我不需要encodeURIComponent()在 URL 或 DATA 值中手动使用(这是我在 bipen 的答案中发现的不清楚)。这是因为该data值是通过$.param()) 自动编码的。以防万一这对其他人有用,这是我使用的示例:

$.ajax({
    url: "ajax.aspx?ajaxid=4",
    data: { 
        "VarA": VarA, 
        "VarB": VarB, 
        "VarC": VarC
    },
    cache: false,
    type: "POST",
    success: function(response) {

    },
    error: function(xhr) {

    }
});
4

8 回答 8

365

使用 ajax 的数据选项。data您可以通过ajax 中的选项将数据对象发送到服务器,该选项type定义了您发送它的方式(POST或者GET)。默认类型是GET方法

试试这个

$.ajax({
  url: "ajax.aspx",
  type: "get", //send it through get method
  data: { 
    ajaxid: 4, 
    UserID: UserID, 
    EmailAddress: EmailAddress
  },
  success: function(response) {
    //Do Something
  },
  error: function(xhr) {
    //Do Something to handle error
  }
});

您可以通过(如果您使用 PHP)获取数据

 $_GET['ajaxid'] //gives 4
 $_GET['UserID'] //gives you the sent userid

在aspx中,我相信是(可能是错误的)

 Request.QueryString["ajaxid"].ToString(); 
于 2013-03-22T17:35:46.320 回答
23

把你的参数放在调用的data一部分。ajax请参阅文档。像这样:

$.ajax({
    url: "/TestPage.aspx",
    data: {"first": "Manu","Last":"Sharma"},
    success: function(response) {
        //Do Something
    },
    error: function(xhr) {
        //Do Something to handle error
    }
});
于 2013-03-22T17:36:36.647 回答
16

这是使用 jQuery 的语法$.get

$.get(url, data, successCallback, datatype)

所以在你的情况下,这相当于,

var url = 'ajax.asp';
var data = { ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress };
var datatype = 'jsonp';

function success(response) {
// do something here 
}

$.get('ajax.aspx', data, success, datatype)

注意 $.get没有让您有机会设置错误处理程序。但是有几种方法可以使用$.ajaxSetup()$.ajaxError()或将 a 链接.fail到您的$.get下面

$.get(url, data, success, datatype)
 .fail(function(){
})

将数据类型设置为 'jsonp' 的原因是由于浏览器同源策略问题,但如果您在托管 javascript 的同一域上发出请求,您应该可以将数据类型设置为json.

如果您不想使用 jquery $.get请查看文档$.ajax以便提供更大的灵活性

于 2018-03-29T02:25:44.933 回答
4

尝试添加这个:

$.ajax({
    url: "ajax.aspx",
    type:'get',
    data: {ajaxid:4, UserID: UserID , EmailAddress: encodeURIComponent(EmailAddress)},
    dataType: 'json',
    success: function(response) {
      //Do Something
    },
    error: function(xhr) {
    //Do Something to handle error
    }
});

取决于预期的数据类型,您可以分配html, json, script, xml

于 2013-03-22T17:36:09.883 回答
2

在我指定的地方有同样的问题,data但浏览器正在向以 . 结尾的 URL 发送请求[Object object]

你应该processData设置为true.

processData: true, // You should comment this out if is false or set to true
于 2017-12-29T20:33:17.837 回答
1

data 属性允许您发送字符串。在您的服务器端代码中,将其作为字符串参数名称“myVar”接受,然后您可以将其解析出来。

$.ajax({
    url: "ajax.aspx",
    data: [myVar = {id: 4, email: 'emailaddress', myArray: [1, 2, 3]}];
    success: function(response) {
    //Do Something
    },
    error: function(xhr) {
    //Do Something to handle error
    }
});
于 2013-03-22T17:37:42.357 回答
0

您可以使用$.ajax(),如果您不想将参数直接放入 URL,请使用data:. 这是附加到 URL

来源:http ://api.jquery.com/jQuery.ajax/

于 2013-03-22T17:36:57.533 回答
0

ajax方法的data参数允许你发送数据到服务器端。在服务器端你可以请求数据。见代码

var id=5;
$.ajax({
    type: "get",
    url: "url of server side script",
    data:{id:id},
    success: function(res){
        console.log(res);
    },
error:function(error)
{
console.log(error);
}
});

在服务器端使用 $_GET 变量接收它。

$_GET['id'];
于 2017-11-06T15:58:50.307 回答