2016-08-25 5 views
2

Я очень озадачен. Я нашел несколько сообщений с очень похожим вопросом, либо остался без ответа, либо весь ответ говорит, что он должен работать. или говорит, что это сработало.JQuery AJAX to PHP получает undefined индекс

Я передал объект пары ключевых значений из jquery в php. и снова предупредите об этом, но если я перейду на страницу php. он говорит, что данные являются нулевым или неопределенным индексом.

ниже моего JQuery

$('#test').click(function(){ 
    var obj= { 
     'key': 'value', 
    }; 
    $.ajax({ 
     url: "../folder/file.php", 
     type: "POST", 
     data: { 
      'obj' : obj 
     }, 
     dataType: "JSON", 
     success:function(data){ 
      alert(data); 
     } 

    }); 
}); 

ниже моего PHP

$data = $_POST['obj']; // this is line 1 
echo json_encode($data); // this is line 2 

С выше кода, когда я нажимаю кнопку тестирования, я буду получать оповещения value. но если я перейду на страницу php после того, как я установил тестовую кнопку. на странице написано Notice: Undefined index: obj on line 1, and null on line 2.

если я изменю сторону php ниже. Я получу there is nothing, когда я иду на страницу PHP, но моя оригинальная страница предупреждения value

if(!empty($_POST['obj'])){ 
    $data = $_POST['obj']; 
    echo json_encode($data); 
}else{ 
    echo 'there is nothing'; 
} 

Почему?

Я получаю предупреждение о ценности, которую я вставлял. Поэтому это должно означать, что данные прошли и обратно. но страница PHP говорит иначе

+1

Переменные не сохраняются между различными исполнениями сценария, за исключением переменных сеанса. – Barmar

+0

, что это значит, что данные были там, когда я нажал на свою тестовую кнопку, но когда я загрузил страницу php, она исчезла? – codenoob

ответ

3

Когда вы посылаете AJAX запрос, который отправляет параметр POST в опции data:, и сценарий может получить к нему доступ в $_POST.

Когда вы переходите к URL-адресу непосредственно из браузера, это не передает никаких параметров POST, поэтому $_POST пуст.

Каждый раз, когда вы выполняете скрипт PHP, он начинает новый процесс. Переменные, установленные в предыдущем сценарии, не сохраняются. Исключение составляет $_SESSION, если вы использовали session_start() в сценариях.

+0

ОК, мой вопрос был подпунктом более крупной проблемы. Я изначально пытался передать объект с множеством объектов. возможно, через jquery ajax. Я вижу, что документ jquery говорит, что он может выполнять только простой объект. – codenoob

+1

Да, вы можете. Он будет кодировать URL-адрес объекта, и PHP автоматически расшифрует его. – Barmar

+0

Как я могу открыть свою php-страницу во время одного и того же запроса ajax. поэтому я могу фактически var_dump свой новый объект и проверить, работают ли вещи. – codenoob

2

Вы не понять, как HTTP работает, HTTP является лицом без гражданства, если вы хотите, значение, которое должно быть сохранено, использовать PHP session_start() и хранить значение от должности до $_SESSION