JQuery для PHP - сериализованные строки - PullRequest
1 голос
/ 30 ноября 2011

Я сейчас в AJAX'е в форме входа.

var data = $(this).serialize();

Это данные, которые я отправляю, я получаю это с помощью PHP, используя Codeigniter, например:

$ajax = $this->input->post('data');

Возвращает username=john&password=doe, как и следовало ожидать.

Как мне превратить это в массив? Я пытался сделать unserialize(), и я получаю ноль.

Ответы [ 6 ]

4 голосов
/ 30 ноября 2011

Я полагаю, что вы можете использовать функцию PHP parse_str(): http://php.net/manual/en/function.parse-str.php

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

?>

Используя ваш код, вы получите:

parse_str($this->input->post('data'), $ajax);
echo $ajax['username'] . "/" . $ajax['password'];
3 голосов
/ 30 ноября 2011

Краткий ответ: parse_str;

parse_str($ajax, $array);
$array === array('username'=>'john', 'password'=>'doe');

Однако способ отправки ваших ajax-данных немного странный. Почему вы сериализуетесь в форматированную строку и отправляете эту строку в качестве значения параметра data? Почему бы вам просто не отправить его напрямую? Тогда вы могли бы использовать $this->input->post('username') === 'john' без дополнительного уровня десериализации.

Например, сделать это:

$.post(url, $(form).serialize());

вместо этого (что вы, похоже, делаете:

$.post(url, {data:$(form).serialize()});
1 голос
/ 30 ноября 2011
$parameters = array();

foreach ( explode( '&', $ajax ) as $parameterAndValue ) {
    list ( $parameter, $value ) = explode( '=', $parameterAndValue );
    $parameters[$parameter] = $value;
}
1 голос
/ 30 ноября 2011

Использовать parse_str ()

http://php.net/manual/en/function.parse-str.php

0 голосов
/ 24 января 2013

Просто используйте следующим образом

<?php $username = $this->input->post('username');?>
<?php $password= $this->input->post('password');?>

Вы можете сделать что-нибудь с указанными выше переменными

0 голосов
/ 11 декабря 2011

Если мы приглашаем, мы можем использовать обычный запрос, он защищается от типа запроса от ajax, используя GET или POST, а затем в php мы можем использовать как обычный пост, как $_POST['username'] или $_GET['username'], которого у нас нетиспользовать функцию для десериализации этого, а для проверки с использованием CI просто вызовите как обычное использование, $this->input->post('username'), я не прав?

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