Як передавати параметри в GET-запитах за допомогою jQuery


252

Як я повинен передавати значення рядка запиту у запиті 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 (), оскільки це те, до чого я звик (немає особливо вагомих причин - лише особисті переваги).

Редагувати 04.09.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) {

    }
});

$ .get - лише ярлик для $ .ajax
Denys Séguret

окрім того, ваш редакція 09.04.2013 є запитом на пошту :-), але, мабуть, працює так само, як і GET.
commonpike

Відповіді:


308

Використовуйте параметр даних 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(); 

2
вам не потрібно encodeURIComponent. jquery зробить це за вас.
Провулок

2
@KlwWallace Nope. Це PHP (серверна сторона) залежить від того, якою мовою сервісу ви користуєтесь. У PHP саме так ми отримуємо значення отримати запит.
bipen

1
@bipen. Роджер, що. Я видалив свій коментар, щоб нікого не бентежити. Дякую.
Кірбі Л. Уоллес

вам потрібно перетворити об’єкт у параметри GET за допомогою функції jQuery.param (), тож використовуючи jQuery ви повинні використовувати data:$.param({ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress})замістьdata: { ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress }
Power Engineering

22

Поставте свої парами в dataчастині ajaxдзвінка. Дивіться документи . Так:

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

10

Ось синтаксис за допомогою 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 () або прив’язуючи до .failсебе, $.getяк нижче

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

Причина встановлення типу даних "jsonp" пов’язана з проблемами політики оригінального веб-переглядача веб-переглядача, але якщо ви робите запит у тому самому домені, де розміщується ваш JavaScript, вам слід добре встановити тип даних json.

Якщо ви не хочете використовувати jquery, $.getтоді перегляньте документи, для $.ajaxяких передбачено можливість більшої гнучкості


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


ваше рішення корисне, але цікаво, як визначити змінну ( ID) вперед, перш ніж передавати її як параметр? Я Q на SO, stackoverflow.com/questions/41192531/… . Я просунувся на цьому Q набагато далі, і тепер я закликаю діалог jquery і закликаю ajax для отримання даних з mysql. Я пропускаю посилання про те, як отримати унікальний ідентифікатор, пов’язаний з кожним клацанням точки даних . Вдячний, якщо ви можете мені допомогти. Дякую
user5249203

1

Властивість даних дозволяє надсилати рядок. На коді вашого сервера прийміть його як ім'я аргументу "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
    }
});

1
Навіщо це робити stringify? ajaxРеалізація jQuery піклується про це для вас.
Стів

1

У мене була та сама проблема, яку я вказав, dataале браузер надсилав запити на URL, що закінчується [Object object].

Ви повинні були processDataналаштувати true.

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

OMG, спасибі Після 4 годин пошуку та спроби остаточно виправили тут проблему :-)
Кім К.


-1

Параметр даних методу ajax дозволяє надсилати дані на сторону сервера. На стороні сервера ви можете запитувати дані. Перегляньте код

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'];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.