Cách truyền tham số trong các yêu cầu GET với jQuery


252

Tôi nên chuyển các giá trị chuỗi truy vấn trong yêu cầu jQuery Ajax như thế nào? Tôi hiện đang làm chúng như sau nhưng tôi chắc chắn có một cách sạch hơn không yêu cầu tôi phải mã hóa thủ công.

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

Tôi đã thấy các ví dụ trong đó các tham số chuỗi truy vấn được truyền dưới dạng một mảng nhưng các ví dụ này tôi đã thấy không sử dụng $.ajax()mô hình, thay vào đó chúng đi thẳng vào $.get(). Ví dụ:

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

Tôi thích sử dụng định dạng $ .ajax () như định dạng mà tôi đã từng sử dụng (không có lý do đặc biệt chính đáng - chỉ là một sở thích cá nhân).

Chỉnh sửa 09/04/2013:

Sau khi câu hỏi của tôi bị đóng (vì "Quá cục bộ"), tôi đã tìm thấy một câu hỏi liên quan (giống hệt nhau) - với 3 câu hỏi không kém (Tôi xấu vì không tìm thấy nó ở vị trí đầu tiên):

Sử dụng jquery để tạo POST, làm thế nào để cung cấp đúng tham số 'dữ liệu'?

Điều này đã trả lời câu hỏi của tôi một cách hoàn hảo, tôi thấy rằng làm theo cách này dễ đọc hơn nhiều và tôi không cần sử dụng thủ công encodeURIComponent()trong các giá trị URL hoặc DATA (đó là điều tôi thấy không rõ ràng trong câu trả lời của bipen). Điều này là do datagiá trị được mã hóa tự động thông qua $.param()). Chỉ trong trường hợp này có thể được sử dụng cho bất kỳ ai khác, đây là ví dụ tôi đã sử dụng:

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

    },
    error: function(xhr) {

    }
});

$ .get chỉ là một lối tắt cho $ .ajax
Denys Séguret

ngoại trừ, Chỉnh sửa 09/04/2013 của bạn là một yêu cầu bài đăng :-) nhưng rõ ràng nó hoạt động giống như GET.
phổ biến

Câu trả lời:


307

Sử dụng tùy chọn dữ liệu của ajax. Bạn có thể gửi đối tượng dữ liệu đến máy chủ theo datatùy chọn trong ajax và typeđịnh nghĩa cách bạn gửi nó (hoặc POSThoặc GET). Kiểu mặc định là GETphương thức

Thử cái này

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

Và bạn có thể lấy dữ liệu bằng cách (nếu bạn đang sử dụng PHP)

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

Trong aspx, tôi tin rằng nó (có thể sai)

 Request.QueryString["ajaxid"].ToString(); 

2
bạn không cần encodeURIComponent. jquery sẽ làm điều này cho bạn.
Ngõ

2
@KlwWallace Không. Đó là PHP (phía máy chủ) phụ thuộc vào ngôn ngữ dịch vụ bạn đang sử dụng. Trong PHP đó là cách chúng tôi nhận được các giá trị của yêu cầu.
bipen

1
@bipen. Roger đó. Tôi đã xóa bình luận của tôi để không nhầm lẫn bất cứ ai. Cám ơn.
Kirby L. Wallace

bạn cần chuyển đổi đối tượng thành các tham số GET với hàm jQuery.param (), vì vậy, sử dụng jQuery bạn nên sử dụng data:$.param({ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress}), thay vìdata: { ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress }
Power Engineering

22

Đặt thông số của bạn trong dataphần của ajaxcuộc gọi. Xem tài liệu . Thích như vậy:

$.ajax({
    url: "/TestPage.aspx",
    data: {"first": "Manu","Last":"Sharma"},
    success: function(response) {
        //Do Something
    },
    error: function(xhr) {
        //Do Something to handle error
    }
});

10

Đây là cú pháp sử dụng jQuery $.get

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

Vì vậy, trong trường hợp của bạn, điều đó sẽ tương đương với,

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)

Lưu ý $.get không cung cấp cho bạn cơ hội để thiết lập một trình xử lý lỗi. Nhưng có một số cách để làm điều đó bằng cách sử dụng $ .ajaxSetup () , $ .ajaxError () hoặc xâu chuỗi .failtheo cách của bạn $.getdưới đây

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

Lý do đặt kiểu dữ liệu là 'jsonp' là do các vấn đề chính sách nguồn gốc của trình duyệt, nhưng nếu bạn đang thực hiện yêu cầu trên cùng một tên miền nơi javascript của bạn được lưu trữ, bạn sẽ ổn với kiểu dữ liệu được đặt json.

Nếu bạn không muốn sử dụng jquery $.getthì hãy xem các tài liệu cho $.ajaxphép phòng linh hoạt hơn


4

Hãy thử thêm điều này:

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

Phụ thuộc vào kiểu dữ liệu nào được mong đợi, bạn có thể chỉ định html, json, script, xml


giải pháp của bạn rất hữu ích, nhưng tự hỏi làm thế nào để xác định biến ( ID) trước khi chuyển nó dưới dạng tham số? Tôi có Q trên SO, stackoverflow.com/questions/41192531/ . Tôi đã tiến bộ về Q này hơn nữa, bây giờ tôi gọi một hộp thoại jquery và gọi ajax để lấy dữ liệu từ mysql. Tôi đang thiếu liên kết về cách truy xuất ID duy nhất được liên kết với mỗi lần nhấp dữ liệu . Đánh giá cao nếu bạn có thể giúp tôi ra. Cảm ơn bạn
dùng5249203

1

Thuộc tính dữ liệu cho phép bạn gửi trong một chuỗi. Trên mã phía máy chủ của bạn, chấp nhận nó dưới dạng tên đối số chuỗi "myVar" và sau đó bạn có thể phân tích cú pháp.

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

1
Tại sao bạn sẽ làm gì stringify? Việc ajaxtriển khai của jQuery đảm nhận việc đó cho bạn.
Steve

1

Có cùng một vấn đề mà tôi đã chỉ định datanhưng trình duyệt đã gửi yêu cầu đến URL kết thúc bằng [Object object].

Bạn nên processDatađặt thành true.

processData: true, // You should comment this out if is false or set to true

OMG, cảm ơn. Sau 4 giờ tìm kiếm và thử điều này cuối cùng đã khắc phục một sự cố tại đây :-)
Kim K.


-1

Tham số dữ liệu của phương thức ajax cho phép bạn gửi dữ liệu đến phía máy chủ. Phía máy chủ bạn có thể yêu cầu dữ liệu. Xem mã

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

Ở phía máy chủ nhận nó bằng biến $ _GET.

$_GET['id'];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.