Я пытаюсь вызвать PHP-файл через POST и вернуть его результат в код вызывающего AJAX. Но, к сожалению, это не работает. После возиться с моим кодом я либо получить «неопределенная», «перезагрузки страницы» или «ошибка в консоли, что мой параметр, используемый в функции успеха не определен»Восстановить возвращение JSON из PHP, вызванного из AJAX
Вот код Аякса:
function postComment(formdata) {
if (formdata.comment != '') {
$.ajax({
type: 'POST',
url: '../../includes/post_comment.php',
data: formdata,
headers: {
'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'
},
success: postSuccess(data), // function to handle the return
error: postError // function to handle errors
});
} else {
alert('Empty please write something!');
}
}
function postSuccess(data) {
console.log(data);
$('#commentform').get(0).reset();
displayComment(data);
}
и вот мой PHP обработчик:
$ajax = ($_SERVER['REQUESTED_WITH'] === 'XMLHttpRequest');
$added = add_comment($mysqli, $_POST); // contains an array
if ($ajax) {
sendAjaxResponse($added);
} else {
sendStandardResponse($added);
}
function sendAjaxResponse($added)
{
header("Content-Type: application/x-javascript");
if ($added) {
header('Status: 201');
echo(json_encode($added));
} else {
header('Status: 400');
}
}
это то, что добавили выглядит, как в PHP:
$added = array(
'id' => $id,//integer example: 90
'comment_post_ID' => $story_ID, //integer example: 21
'comment_author' => $author, //String example: Dominic
'comment' => $comment, //String example: This is a comment
'comment_date' => $date); //DateTime/String example: 08/02/2016 1970-01-01 00:00:00
ОБНОВЛЕНИЕ
Я изменил код Аякса следующее:
$.ajax({
type: 'POST',
url: '../../includes/post_comment.php',
success: postSuccess,
data: formdata,
headers: {
'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'
},
error: postError,
});
Теперь я получаю полный HTML-код страницы вызова этой функции АЯКС
Я попытался установить aysnc: false
в запрос ajax, но это не помогло, всегда получая html-код источника (вызывая функцию ajax).
На данный момент я перехожу к другому подходу, который не нуждается в данных возврата. Но спасибо за помощь
'../../ включает/post_comment.php' не является URL –
Когда вы укажете 'success: postSuccess (data)' вы _calling_ 'postSuccess' сразу, с несуществующим параметром' data'. – jszobody
Попробуйте удалить '(data)'. Параметр success принимает функцию. Вы передаете результат этого вызова функции $ .ajax – Phil