Получение нескольких переменных записи в функции контроллера в Codeingiter - PullRequest
0 голосов
/ 09 ноября 2010

Я отправляю данные на контроллер следующим образом:

var postVars = new Array();
postVars[0] = key;
postVars[1] = haveCredits;
postVars[2] = creditsNeeded;
postVars[3] = creditsLeft;
//alert(postVars.join("&"));
xhr.open('POST', 'ajax');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(postVars.join("&"));

Как я могу получить эти значения в моей функции контроллера?

Код контроллера:

$variableValues= explode('&',$this->input->post('postVars'));

Возвращается пустой массив.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

То, что вы отправляете, на самом деле не application/x-www-form-urlencoded формат. Вы просто соединяете строковые значения, а не именованные параметры, экранированные URL.

Я предлагаю отправлять отдельные параметры в стандартном URL-кодированном формате:

function encodeParameters(o) {
    for (var k in o)
        pars.push(encodeURIComponent(k)+'='+encodeURIComponent(o[k]))
    return pars.join('&');
}

var pars= {key: key, have: haveCredits, needed: creditsNeeded, left: creditsLeft};
xhr.open('POST', '/ajax');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(encodeParameters(pars));

тогда на стороне PHP вы можете получить их, используя обычные массивы запросов:

$key= $_POST['key'];
$creditsNeeded= intval($_POST['needed']);
// ...
0 голосов
/ 09 ноября 2010

Изменить последнюю строку следующим образом:

xhr.send("postVars="+encodeURIComponent(postVars.join("&")));

Теперь $variableValues= explode('&',$this->input->post('postVars')); должно работать.

Кстати, я хотел бы познакомить вас с jQuery . Это одна из самых популярных библиотек JavaScript с очень мощным AJAX API .

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