我正在使用一个codeigniter应用程序,它根据从我模型中的函数返回的数据库查询动态生成一些html元素。
在我的一个视图中,我使用XMLHttpRequest在我的一个控制器中调用一个php函数,后者又以字符串的形式从我的模型中获取数据,并为responseText回显它。我的javascript代码如下所示:
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", "/controller/my_function", true);
var postStr = "name="+proposalName+"&data="+data;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(postStr);
var response = xmlHttp.responseText;
被调用的函数如下所示:
public function my_function(){
$data['name'] = $this->input->post('name');
$data['data'] = $this->input->post('data');
$string = $this->my_model->my_model_function($data);
echo $string;
}
模型正确地返回字符串,即使在回显函数中的随机数字或字符串之后,它仍然没有从响应文本中获得任何内容。无论我试图在函数中回应什么,响应文本中似乎没有任何内容。我在这做错了什么?如何让responseText从我的php函数中获取正确的值?
编辑:修复了postStr变量的复制问题
答案 0 :(得分:3)
var post Str = "name="+proposalName+"&data="+data;
这是语法错误。当JavaScript点击Str
时,它就会失败。永远不会发送HTTP请求。
即使它已被发送,您正在发出异步请求(open
的第三个参数是true
),因此在收到响应之前它不会锁定整个页面。在响应设置之前,您将阅读xmlHttp.responseText
。
您需要onreadystatechange
功能。
请参阅包含示例的MDN documentation for XMLHttpRequest。
答案 1 :(得分:2)
几个主要问题:
1)您的Javascript 无效。
var post Str = "name="+proposalName+"&data="+data;
post Str
有空格。无论如何,此代码都不会运行。
2)您真的需要了解如何使用XMLHttpRequest
阅读本文,它应该有所帮助: http://www.jibbering.com/2002/4/httprequest.html