Получать POST-запрос на PHP от OpenLayers JavaScript

#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);
?>
 

Вот что происходит:

  1. index.php получает запрос POST.
  2. FireBug также сообщает, что параметры POST содержат Success, тот, который был отправлен.
  3. 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 библиотека, вы можете скачать ее по этой ссылке

https://github.com/ilinsky/xmlhttprequest