Wh ru, вы отвечаете на звонок POST таким образом, вам нужно три вещей - прочитайте данные с _POST
, положите их там правильно и ответьте в JSON.
$.ajax({
type: "POST",
url: 'signage.php',
data: {
subDir: val,
}
success: function(answer)
{
alert("server said: " + answer.data);
}
});
или также:
$.post(
'signage.php',
{
subDir: val
},
function(answer){
alert("server said: " + answer.data);
}
}
Тогда в ответ:
<?php
if (array_key_exists('subDir', $_POST)) {
$subDir = $_POST['subDir'];
$answer = array(
'data' => "You said, '{$subDir}'",
);
header("Content-Type: application/json;charset=utf-8");
print json_encode($answer);
exit();
}
Обратите внимание, что в ответ, вы должны установить Content-Type и вы должны послать действительный JSON, что обычно означает, что вам нужно немедленно выйти после отправки пакета JSON, чтобы не отправлять что-либо еще. Обратите внимание также, что использование isset
является рискованным, потому что вы не можете отправить некоторые значения, которые эквивалентны unset (для например, логическое значение false или пустая строка). Если вы хотите проверить, что _POST на самом деле содержит ключ subDir, используйте явно array_key_exists
(по той же причине в Javascript вы иногда используете hasOwnProperty).
Наконец, поскольку вы используйте один файл, вы должны учитывать, что при первом открытии файла _POST будет пустым, так что вы начнете с отображения «fail»!Вы уже начали ликвидацию этого с помощью _POST:
- _POST означает, что это вызов AJAX
- _GET означает, что это нормальное открытие signage.php
Так что вы могли бы сделать что-то как:
<?php // NO HTML BEFORE THIS POINT. NO OUTPUT AT ALL, ACTUALLY,
// OR $.post() WILL FAIL.
if (!empty($_POST)) {
// AJAX call. Do whatever you want, but the script must not
// get out of this if() alive.
exit(); // Ensure it doesn't.
}
// Normal _GET opening of the page (i.e. we display HTML here).
более прочном способ проверки проверяет статус XHR запроса с вспомогательной функции, такие как:
/**
* isXHR. Answers the question, "Was I called through AJAX?".
* @return boolean
*/
function isXHR() {
$key = 'HTTP_X_REQUESTED_WITH';
return array_key_exists($key, $_SERVER)
&& ('xmlhttprequest'
== strtolower($_SERVER[$key])
)
;
}
Теперь вы бы:
if (isXHR()) {
// Now you can use both $.post() or $.get()
exit();
}
и на самом деле вы могли бы разгрузить ваш код AJAX в другой файл:
if (isXHR()) {
include('signage-ajax.php');
exit();
}
Благодарим за ответ. Сначала попробую ваше предложение. –