2016-09-13 2 views
0

Во-первых, я знаю, что варианты этого вопроса были заданы раньше. Тем не менее, во всех предыдущем примере, Аскер вопроса использует Ajax ищет что-то вроде этого:Как передать переменные через JavaScript на PHP при использовании Ajax?

$.ajax({ 
    type: "POST", 
    url: 'logtime.php', 
    data: "userID=" + userID; 
}); 

Однако я не знаком с этим стилем. Как мне преподавали сделать Ajax запросов использует код следующего вида:

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "data.php"); 
xhr.send(); 

xhr.onreadystatechange = function() { 
    if(xhr.readyState === 4) { 
     //DEFINE CALLBACK FUNCTION 
    } 
} 

Таким образом, используя вышеупомянутую стиль Ajax, что я знаком с, как следует об отправке данных на сервер для обработки мой php-файл data.php? Я знаю, что это как-то связано с включением его в скобки xhr.send(), но я не уверен, как именно это делается?

Также можно использовать метод GET, если мы хотим получить данные из базы данных, но должны предоставить переменную php, чтобы она могла выбрать правильные данные из базы данных?

Наконец, какая разница между методом Ajax, который я преподавал, и другим методом, о котором я упоминал, который я часто вижу, упоминается на SO?

Спасибо.

+2

У вас есть «сырой» аякс. совершенно функциональный код, но оставляет его вам, чтобы справиться со всеми отклонениями браузера, обратной совместимостью и т. д. ... большинство людей просто используют библиотеку jquery, которая обертывает все то, что у вас есть, в один $ .get (...) 'звонок. Под капотом все равно одно и то же - простой старый HTTP-запрос/ответный цикл. В http нет переменных. просто строки запроса и тела сообщений. –

+0

Возможный дубликат [Передача JavaScript-массива в PHP через JQuery $ .ajax] (http://stackoverflow.com/questions/2013728/passing-javascript-array-to-php-through-jquery-ajax) – g9m29

ответ

3

Пожалуйста, попробуйте:

`xhr.send('you_user=user&your_password=password');` 

... или может использовать что-то более элегантное:

var d = new FormData(); 
d.append('you_user', 'user'); 
d.append('your_passowrd', 'password'); 
// ... 
xhr.send(d); 
+0

Хорошо, но как я бы получить эти данные, когда в PHP-код? Использую ли я $ _GET ['you_user']? –

+0

Да! Чтобы убедиться и проверить запрос, добавьте в свой файл logtime.php: var_dump ($ _ REQUEST); –

+0

Отлично, это отвечает на мой вопрос. Спасибо. –

2

Есть несколько уровней к этому.

HTTP поддерживает число methods, которые имеют разные цели.

Проще говоря, главными являются GET и POST. GET используется для запроса данных, а POST используется при отправке данных на сервер, чтобы что-то изменить.

В запросе GET, любые данные, которые вы хотите отправить на сервер, как правило, закодированный в URL с помощью строки запроса (кодируются с использованием the application/x-www-form-urlencoded scheme.

В запросе POST, данные, как правило, помещаются в теле запроса , и обычно будет использовать application/x-www-form-urlencoded.Если вы захотите загрузить файлы, вместо этого вы будете использовать multipart/form-data.

Кодирование данных, вероятно, проще всего выполняется с использованием этого алгоритма:

(Это не самый эффективный способ сделать это, но он ясно показывает шаги).

var data = [ 
    { key: "Foo", value: "a a a" }, 
    { key: "Bar", value: "b b b" }, 
    { key: "Baz", value: "c c c" } 
]; 

var key_value_pairs = []; 

for (var i = 0; i < data.length; i++) { 
    var pair = encodeURIComponent(data[i].key) + "=" + encodeURIComponent(data[i].value); 
    key_value_pairs.push(pair); 
} 

var query_string = key_value_pairs.join("&"); 

var url = "data.php" + "?" + query_string; 

var xhr = new XMLHttpRequest(); 
xhr.open("GET", url); 
xhr.send(); 

Если вы хотите сделать запрос POST, то это почти то же самое. Вы просто изменить конец:

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "data.php"); 
xhr.send(query_string); 

Наконец, какова разница между методом Ajax я преподавал, и другой метод, я упомянул, что я часто вижу, упомянутые на SO?

Он использует библиотеку jQuery (но не очень хороший пример).Вы можете увидеть, где он строит строку запроса вручную ("userID=" + userID), но он не может использовать процедуры кодирования. Безопасный подход при использовании jQuery заключается в том, чтобы передать объект вместо данных:

$.ajax({ 
    type: "POST", 
    url: 'logtime.php', 
    data: { userID: userID } 
}); 
Смежные вопросы