Я пытаюсь отправить переменные на ту же страницу, что и вызов AJAX.
Я получаю успешный результат, только если я отделяю PHP-скрипт (например, process.php
и соответствующим образом изменяю url
AJAX).
index.php <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script> $(function() { $('form').submit(function(e) { e.preventDefault(); $.ajax({ type : 'POST', url : 'index.php', data : $(this).serialize(), dataType : 'json', encode : true }) .done(function(data) { $('#result').html(data); }) }); }); </script> </head> <body> <?php $data = array(); if(isset($_POST['name'])) { $data = 'You entered: ' . $_POST['name']; echo json_encode($data); } ?> <form> <input type="text" name="name"> <input type="submit" value="Submit"> </form> <div id="result"></div> </body>
Возможно ли, чтобы одна и та же страница захватывала и обрабатывала переменные, которые мы передаем с помощью AJAX?
Вы устанавливаете dataType : json
в настройках AJAX, чтобы вы могли echo
объект json вместо String (HTML).
Используйте exit()
вместо echo
и поместите ваш PHP в самую верхнюю часть страницы. Так, чтобы HTML не был эхом, прежде чем вы проверите, существует ли $_POST['name']
.
Другое дело, что ваш $data = array()
преобразуется в строку в этой строке:
$data = 'You entered:' . $_POST['name'];
это должно быть $data[] = ...
<?php $data = array(); if(isset($_POST['name'])) { $data[] = 'You entered:' . $_POST['name']; exit(json_encode($data)); } ?> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script> $(function() { $('form').submit(function(e) { e.preventDefault(); $.ajax({ type : 'POST', url : 'index.php', data : $(this).serialize(), dataType : 'json', encode : true }) .done(function(data) { $('#result').html(data); }) }); }); </script> </head> <body> <form> <input type="text" name="name"> <input type="submit" value="Submit"> </form> <div id="result"></div> </body>
add die (); function И используйте $ _SERVER ['HTTP_X_REQUESTED_WITH'], которые обнаруживают запрос ajax. alos put serialize () вне стороны функции ajax для получения данных
var data = ''; $(function() { $('form').submit(function(e) { e.preventDefault(); data = $(this).serialize(); $.ajax({ type : 'POST', url : 'index.php', data : data, dataType : 'json', encode : true }) .done(function(data) { $('#result').html(data); }) }); }); <?php $data = array(); if(isset($_POST['name']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH'])) { $data = 'You entered: ' . $_POST['name']; echo json_encode($data); die(); } ?>