2009-04-14 3 views
1

У меня есть форма в PHP, отправляющая переменные в PHP-файл, который должным образом вставляет их в таблицу MySQL.Извлечение переменных PHP из ввода формы AJAX

В настоящее время у меня есть div, отображающий ответ от PHP (который является тем, что напечатано PHP).

Все работает нормально. Проблема в том, что я хочу использовать переменные, которые создаются/обновляются во время процесса вставки PHP MySQL. То есть не только показать, что напечатано в этом PHP-файле, но использовать эти переменные.

Я видел сложное использование кодировки JSON, чтобы, возможно, пересечь этот разрыв, но мне было бы интересно узнать, является ли это самым простым подходом. И если у кого-то есть хорошие ссылки или примеры по этому вопросу.

+0

Что вы подразумеваете под «использованием» переменных? Страница формы PHP не может ничего использовать в этот момент, она уже завершена. Использовать их в Javascript? –

+0

Я имею в виду распечатать их. В основном, я пытаюсь получить переменные, которые были отправлены на PHP, чтобы вернуться к значениям формы, поэтому форма всегда отражает то, что находится в БД ... Я просто подумал, что это не нужно из PHP ... Я мог бы печатать из AJAX, может быть? – waxical

ответ

1

Я предполагаю, что вы хотите иметь несколько частей данных, отправленных обратно через AJAX на свою страницу и управлять ими.

JSON действительно самый простой способ сделать это. Если вы используете PHP5, вы можете использовать json_encode() со стороны PHP, чтобы отправить сложный тип данных (например, объект или массив) обратно на страницу браузера. Затем в javascript вы используете eval() для данных, которые отправляются обратно (например: var data = eval (response);), чтобы проанализировать его обратно в полезный сложный тип в javascript.

Существует множество учебных пособий, в которых будет показано, как это сделать, и объясните это более подробно, чем когда-либо ответ.

0

Использование PrototypeJS и сделать это следующим образом:

Есть некоторые PHP как этого

$jsonHeader = array(); 

if($_REQUEST['param1']) 
{ 
    echo '<p>You passed ' . $_REQUEST['param1'] . '</p>'; 
    $jsonHeader['status'] = 'Success'; 
}else 
{ 
    $jsonHeader['status'] = 'Failed because the request was invalid'; 
} 

if(is_array($jsonHeader) and sizeof($jsonHeader) > 0) 
{ 
    header('X-JSON: (' . json_encode($jsonHeader) . ')'); 
} 

Затем сделайте ваш Ajax вызов, как этого

new Ajax.Request('dostuff.php', { 
    method: 'get', 
    parameters: {'param1': 'this is param 1'}, 
    onSuccess: function(response, jsonHeader){ 
    if(jsonHeader['status'] == 'Success'){ 
     //Everything is OK, do stuff 
    }else{ 
     alert(jsonHeader['status']); 
    } 
    }, 
    onFailure: function(){ 
    alert('Fail!'); 
    } 
}); 

Прототип захватывает заголовок X-JSON возвращенного по PHP и автоматически устанавливает аргумент jsonHeader функции onSuccess в массив Javascript из значений, которые первоначально были установлены в PHP.


Приведенный выше сценарий хорош, если количество данных, которые вы возвращаете в Javascript, соответствует заголовку HTTP.

Если вам нужно передать много данных, просто введите PHP, чтобы получить результат, закодированный JSON, а не сделать его частью заголовка. Затем вы можете использовать метод evalJSON() объекта ответа в вашем вызове Ajax.

+0

Зачем беспокоиться об этом? Вам не нужен один, особенно такой, как прототип. – Matt

+0

Я бы не назвал Prototype каркасом. Мне это нравится, потому что это делает Ajax-звонки и JSON-файлы намного проще на стороне Javascript. –

0

Вам не нужно просто показывать, что напечатано в этом PHP-файле, ваш PHP-файл может печатать JavaScript, который возвращает вас на вашу страницу. После этого вы можете выполнить эти команды. Мне нравится использовать функцию eval для этого, но многие люди здесь отговаривают вас от этого:

0

Просто используйте функцию «эхо», чтобы поместить переменные PHP в стандартный вывод вывода.

echo $ myVarName;

Или, я предпочитаю printf(), обязательно проверяйте HTML на входе ПЕРЕД вы выводите, чтобы избежать проблем с XSS.

использовать что-то вроде этого:

Е ("Ваш вклад был:% s", strip_tags (% myInputVar));

Кроме того, не забудьте использовать форматы% d или% f при выводе номера для обеспечения максимальной безопасности.

Смежные вопросы