Обратитесь к данным постов jQuery в скрипте PHP - PullRequest
0 голосов
/ 07 августа 2009

В настоящее время я работаю над веб-приложением на основе ajax, которое выполняет некоторые XHR.

Я выбрал CakePHP + jQuery для работы, они работают довольно хорошо, за исключением этой маленькой проблемы.

Скажем, я создаю строку правильной формы JSON ==> {"test": "hello world"}

Затем я вызываю ajax-метод jQuery, чтобы отправить его на целевую php-страницу:

jQuery.ajax
    ({
        type: 'POST',
        cache: false,
        async: false,
        timeout: 10000,
        url : 'http://localhost/method/',
        dataType : 'json',  //defines expected response datatype
        contentType : 'application/json', //defines request datatype
        data : { "test" : "hello world"},
        success : function(json)
        {
           //do some stuff here.
        }});

Ранее я пробовал эту функцию ajax с пустыми данными (то есть просто использовал data: {}, так как это POST), и она работала просто отлично; однако теперь, когда я добавил данные в формате JSON в HTTP POST, есть ли способ сослаться на них со стороны сценария PHP?

Я пытался: data : { "data" : {"test" : "helloworld"}}

Я использую PHP isset [$ _ POST ['data'] для проверки, и в результате переменная POST 'data' не установлена.

Может кто-нибудь дать мне способ решить эту проблему? Большое спасибо заранее !!!

Ответы [ 7 ]

4 голосов
/ 07 августа 2009

Это может быть то, что вы после (от http://www.factsandpeople.com/facts-mainmenu-5/26-html-and-javascript/89-jquery-ajax-json-and-php):

$(document).ready(function(){ 
  var data = 
  { 
    "sales": [ 
      { "firstname" : "John", "lastname" : "Brown" },
      { "firstname" : "Marc", "lastname" : "Johnson" }
    ] // end of sales array
  }
  var dataString = JSON.stringify(data);
  $.post('simpleformSubmit.php', { data: dataString}, showResult, "text");
});

PHP-скрипт (данные Post содержат структуру json):

<?php
  $logFile = 'logFile';
  $res = json_decode(stripslashes($_POST['data']), true);

  echo "sales1_lastname: ".$res['sales'][1]['lastname'];
?>
1 голос
/ 07 августа 2009

Я не уверен, имеет ли значение тип содержимого какое-либо влияние на торт php.

http://docs.jquery.com/Ajax/jQuery.ajax#options

При отправке данных на сервер используйте этот тип контента. По умолчанию используется application / x-www-form-urlencoded, что подходит для большинства случаев.

, установив application / json может кодировать его по-разному, поэтому вы не видите его в массиве $ _POST

1 голос
/ 07 августа 2009

Похоже, что URL был написан неправильно?

url : 'http://localhost/mehtod/'

вместо

url : 'http://localhost/method/'

Иногда самые маленькие вещи самые раздражающие!

0 голосов
/ 27 марта 2010

К вашему сведению: JQuery изменил способ сериализации почтовых данных.

http://forum.jquery.com/topic/nested-param-serialization

Вы должны установить для параметра «Традиционный» значение true, в противном случае

{Значения: [ "1", "2", "3"]}

выйдет как

Значение [] = 1 & Значение [] = 2 & Значение [] = 3

вместо

Значение = 1 & Значение = 2 & Значение = 3

0 голосов
/ 07 августа 2009

цитата из документации jQuery (http://docs.jquery.com/Ajax/jQuery.ajax#options):

данные - данные для отправки на сервер. Он преобразуется в строку запроса, если это еще не строка. Он добавляется в URL для GET-запросов. См. Параметр processData, чтобы предотвратить эту автоматическую обработку. Объект должен быть парой ключ / значение. Если значение является массивом, jQuery сериализует несколько значений с одним и тем же ключом, т.е. {foo: ["bar1", "bar2"]} становится '& foo = bar1 & foo = bar2'.

0 голосов
/ 07 августа 2009

Каждая пара ключ / значение в массиве data отправляется в PHP как пара ключ / значение POST. Итак, в вашем случае:

echo $_POST['test']; // Echos "helloworld"
0 голосов
/ 07 августа 2009

Данные поступят в PHP в формате ключ / значение, обычно связанном с запросом POST. Значение jQuery data - это то, что jQuery использует для создания запроса POST ... фактические пары ключ / значение, которые входят в массив PHP $_POST, - это то, что вы помещаете в data.

Для вашего кода значение $_POST['test'] должно составлять helloworld.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...