2014-02-19 3 views
0

Вот мой JavaScript:(AJAX/PHP) Почему мой запрос POST не работает в этом кратком примере?

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "pants.php", true); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     var slot = document.getElementsByTagName("section")[0].innerHTML = xhr.responseText; 
    } 
} 
xhr.send("name=Sarah"); 

Я посылаю «имя = Сару», чтобы testpage.php через POST, и когда я получаю ответ, что я делаю, чтобы отобразить его на моей странице.

И вот pants.php:

echo $_POST['name'];

Так что я просто должен отображать "Сара" на этой странице. Но вместо этого я получаю сообщение об ошибке «: Undefined index: name». Я не могу понять, почему это ...

+0

Не удается воспроизвести: HTTP: // jsfiddle .net/5HHSv /. Но PHP действительно может потребовать заголовки типа контента, я не знаю. –

+0

Я также предлагаю начать использовать панель инструментов разработчика (https://developers.google.com/chrome-developer-tools/) или [Firebug] (http://getfirebug.com/), чтобы помочь отладить AJAX Запросы. Если вы посмотрите на вкладках Сеть/Сеть, он скажет вам, были ли вы успешны POSTED-значения, и если да, какая конечная точка, полезная нагрузка, сколько времени потребовалось и т.д. – Newbi3

+0

@FelixKling - Когда я запускаю этот тест, я получаю «Контент» -Type: text/plain', который PHP (правильно) не будет анализировать как данные формы. – Quentin

ответ

1

Вы должны добавить следующее:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') 

Этот заголовок является обязательным для POST запрашивает

+1

Не могли бы вы привести источник, который поддерживает ваше требование? –

+0

Спасибо, ты прав. Я не знал об этом, я кое-что узнал. – GreenTriangle

+0

Заголовок включен по умолчанию, просто с другим значением (которое не указывает PHP, которое вы закодировали в виде данных формы). – Quentin

Смежные вопросы