#php #javascript #post #openlayers
#php #javascript #Публикация #openlayers
Вопрос:
У меня проблемы с получением POST-запроса на PHP. Я использую JavaScript для отправки данных на страницу PHP с POST-запросом. JavaScript из OpenLayers.js , и часть, которая отправляет запрос, выглядит следующим образом:
var postrequest = OpenLayers.Request.POST({
url: "http://localhost/index.php",
data: "success",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
});
В PHP я использую этот код, чтобы увидеть, что я получаю:
<?php
print_r($_POST);
?>
Вот что происходит:
- index.php получает запрос POST.
- FireBug также сообщает, что параметры POST содержат Success, тот, который был отправлен.
- print_r($_POST); в index.php просто выдает это: array() и не изменяется после запроса POST из JavaScript.
Итак, данные отправляются и принимаются, но мой PHP-код каким-то образом не понимает этого, или я не использую правильную функцию PHP.
Любые предложения, где искать и что попробовать?
Комментарии:
1. PHP требует, чтобы любая запись в _POST / _GET имела действительный ключ: конструкция значения — вы передаете простую строку «success», которая сбивает с толку — это значение? тогда в чем ключ? Это ключ? там нет значения. Вместо этого вы можете попробовать прочитать необработанный ввод
php://input
.2. Спасибо, Марк, я полностью пропустил построение ключа / значения, теперь я его изменил. Но print_r($_POST) по-прежнему пуст.
3. Вы делаете
data: "success=true"
? Я не знаю, как работает openlayers, но он также может отправлять это как необработанную строку. Чтоdata: {success: true}
-нибудь меняется?4. Я делаю
data: OpenLayers.Util.getParameterString({status: "success"})
. При этом я получаю пару ключ / значение в качестве POST-запроса (FireBug показывает это как параметры: (статус успеха)), но PHP не может его прочитать.5. вам удалось найти решение? здесь такая же проблема.
Ответ №1:
Я думаю, что свойство «data» должно быть объектом, содержащим пары ключ / значение.
например:
var postrequest = OpenLayers.Request.POST({
url: "http://localhost/index.php",
data: {
userName: "myUsername",
password: "myPassword"
},
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
});
Если это работает, когда вы печатаете_r($ _POST), вы должны увидеть
массив («userName» => «myUsername», «password» => «myPassword»)
Комментарии:
1. Большое спасибо за ответ. Я изменил код, чтобы опубликовать пару ключ / значение. Теперь я получаю статус как ключ и значение «успех», но все равно print_r($_POST) показывает пустой массив.
2. о чем
print_r($_REQUEST)
?3. На самом деле у меня это работает. Когда я смотрю на ответ PHP в FireBug, он сообщает следующее:
Array([status] => success)
. Я думаюprint_r($_POST)
, иprint_r($_REQUEST)
не предполагается писать текст на странице PHP?4. Ну, он напишет ответ и отправит его вызывающему запрашивающему, в данном случае вашему AJAX-запросу, поэтому AJAX-ответ содержит вывод php.
Ответ №2:
Я думаю, вам нужно включить XMLHttpRequest.js библиотека, вы можете скачать ее по этой ссылке