Невозможно опубликовать данные с помощью JQuery и Ajax

Я новичок в php. Я пытаюсь опубликовать некоторые данные с помощью ajax, но это не работает.

Это мой HTML для ввода:

<div class="form-group">
  <h3>Answer:</h3>
  <div class="input-group">
    <textarea name="q1" id="q1" class="form-control" rows="4" ></textarea>        
  </div>
</div>
<button type="button" id="button" class="btn btn-primary btn-lg">Submit</button>

И это моя функция jquery для публикации данных:

$(function(){
  $('button').click(function(){
  var q1= $('#q1').val();
  $.ajax({ 
    type: 'post',
    url: 'test.php',
    data: {
    q1: q1              
   },
                  
    success:  function (response) {  
      console.log( response);
     }           
    });
  });
});

Мой test.php — это простой код для отображения ввода:

<?php 
	$q1= $_POST['q1'];
    echo $q1;
?>

Я не знаю, почему в моем test.php я получаю эту ошибку: Notice: Undefined index: q1 in C:\xampp\htdocs\series\file\test.php on line 2

Может ли кто-нибудь сказать мне, где проблема?


person H.Tirit    schedule 20.03.2016    source источник
comment
Вы получаете эту ошибку, когда переходите непосредственно к test.php в своем браузере?   -  person Leon Aves    schedule 20.03.2016
comment
@LeonAves точно,   -  person H.Tirit    schedule 20.03.2016
comment
Это ожидаемо. Когда вы посещаете его прямо в своем браузере, вы не публикуете q1 в test.php. Вам следует попробовать заменить функцию успеха на function (data) { console.log(data); } и проверить консоль.   -  person Leon Aves    schedule 20.03.2016
comment
@LeonAves Я пробовал это, и я получаю ввод в консоли, однако я все еще получаю сообщение об ошибке   -  person H.Tirit    schedule 20.03.2016
comment
Вы никогда не получите эту ошибку прямо в браузере. PHP ожидает опубликованные данные, которые вы не отправляете при непосредственном посещении страницы. PHP — для всех целей и задач в этом сценарии — не имеет состояния. Он не покажет ввод, который вы дали ему в запросе AJAX, потому что он даже не знает, что запрос был выполнен.   -  person Leon Aves    schedule 20.03.2016
comment
Верно! не могли бы вы сказать мне, что я должен сделать, чтобы решить эту проблему?   -  person H.Tirit    schedule 20.03.2016
comment
Это не проблема. Вы получаете данные обратно в javascript, как и ожидалось. Предположительно, вы хотите использовать данные, отправленные обратно с PHP, в javascript? Зачем вам нужно, чтобы он появлялся при непосредственном посещении страницы? Если вы хотите, чтобы он сохранялся при нескольких запросах, вам нужно будет посмотреть на хранилище сеансов.   -  person Leon Aves    schedule 20.03.2016
comment
Я хочу хранить данные в БД. Я трейд сессию но она не работает   -  person H.Tirit    schedule 20.03.2016
comment
Где ваш код для хранения данных в БД? У вас есть данные в test.php. Как вы хранили данные в сеансе? Это другие вещи, которые вам нужно спросить.   -  person Navid    schedule 20.03.2016
comment
Я думаю, что основная проблема здесь заключается в том, что вы не понимаете, как работает HTTP. Я не думаю, что вы на самом деле хотите, чтобы значение q1 отображалось при посещении test.php, я думаю, вы используете это как показатель успешного выполнения вашего запроса AJAX, чего не должно быть. Взгляните на эту страницу: http://symfony.com/doc/current/book/http_fundamentals.html (не утруждайте себя прочтением раздела «Запросы и ответы в PHP». Это действительно хороший обзор основ HTTP, и он может помочь вам подойти к проблеме с другой точки зрения.   -  person Leon Aves    schedule 20.03.2016
comment
Спасибо. Теперь все ясно и работает так, как я хочу   -  person H.Tirit    schedule 20.03.2016


Ответы (2)


Прежде всего, вы пытаетесь отправить данные json в свой php-файл, поэтому jQuery может не создать правильную полезную нагрузку для вашего запроса, поскольку вы получаете undefined index:q1. Можете ли вы попробовать код ниже;

$(function () {
    $('button').click(function () {
        var q1 = $('#q1').val();
        $.ajax({
            type : 'post',
            url : 'test.php',
            data : "q1="+q1,
            success : function (response) {
                console.log(response);
            }
        });
    });
});
person Cihan Uygun    schedule 20.03.2016
comment
@H.Tirit, поэтому вы проверили сетевой раздел консоли вашего браузера, чтобы узнать, что возвращает test.php после запроса? - person Cihan Uygun; 20.03.2016

Попробуй это:

$('document').ready(function(){

      $("form#data").submit(function(){
          var formData = new FormData($(this)[0]); 
          $.ajax({ 
            url: 'url', 
            type: 'POST', 
            data: formData, 
            async: false, 
            success: function (data) 
            { 
              alert(data); 
            }, 
            cache: false, 
            contentType: false, 
            processData: false 
          }); 
         return false; 
         }); 
      });
}
    <form id="data" method="post">
    <div class="form-group">
      <h3>Answer:</h3>
      <div class="input-group">
        <textarea name="q1" id="q1" class="form-control" rows="4" ></textarea>        
      </div>
    </div>
    <input type="submit" id="button" class="btn btn-primary btn-lg">
    </form>

person Rishi    schedule 20.03.2016