在Codeigniter中的控制器函数中检索多个post变量

时间:2010-11-09 11:28:04

标签: ajax controller

我将数据发布到控制器,如下所示:

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 :(得分:0)

像这样更改最后一行:

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

现在$variableValues= explode('&',$this->input->post('postVars'));应该有效。

是的,我想向您介绍jQuery。它是最流行的JavaScript库之一,具有非常强大的AJAX API

答案 1 :(得分:0)

您发送的内容并非真正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']);
// ...