Ajax для PHP на одной странице

Я пытаюсь отправить переменные на ту же страницу, что и вызов 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(); } ?>