嘿伙计们我正在构建一个应用程序,我在其中通过AJAX将文本框中的输入值发送到控制器函数,然后返回我发送给用户的内容(我正在开发即时搜索,这是第一步) 。
AJAX链接到方法,但我在返回信息时遇到问题。我没有收到任何错误消息,问题是返回字符串是BLANK。 我收到[你写的],而不是[你曾写过我在PUTTED]
非常感谢任何帮助。
view_index.php
function search(){
var term = document.getElementById("mainsearch").value;
$.ajax({
type: "POST",
url: "<?php echo base_url('index.php/site/search/')?>",
data: term,
cache: false,
success: function(html){
alert("you wrote " + html);
}
});
controller_site.php
function search(){
$gotcha = $this->input->post('term');
return $gotcha;
}
答案 0 :(得分:0)
data:
参数接受key : value
json传递给POST,因为json数组键将是您的$_POST
键
试试这个:
$.ajax({
type: "POST",
url: "<?php echo base_url('index.php/site/search/')?>",
data: {'term': term }
cache: false,
success: function(html){
alert("you wrote " + html);
}
});
答案 1 :(得分:0)
您没有正确发送数据,因此PHP无需处理任何内容,您最终无法发回任何内容:
data: term,
POST / GET请求必须采用key=value
格式,而您只发送value
部分。尝试
data: {foo: term},
然后
$gotcha = $this->input->post('foo');
答案 2 :(得分:0)
您需要将return
更改为echo
,因为AJAX响应适用于来自被调用函数的任何echo
。
所以,您可以编写如下代码:
function search(){
$gotcha = $this->input->post('term');
echo $gotcha;
}
或
function search(){
echo = $this->input->post('term');
}
responseText属性以字符串形式返回响应,您可以相应地使用它
答案 3 :(得分:0)
从控制器返回HTML通常是个坏主意。相反,尝试只管理服务器端数据并在客户端执行所有前端。
现在,对于错误:
.ajax
调用1回调:
您的成功回调函数应如下所示:
function (data, status, response) {
}
其中:
你为什么要关心?因为这些额外的参数可以让你决定你的后端是否出现问题所以你可以处理客户端的情况而不会让用户想知道你的应用程序是否不起作用。更糟糕的是,在浏览器的状态栏上显示臭名昭着的红叉。
如果您设置dataType
函数的jQuery.ajax
参数,那么您可以明确地告诉jQuery您希望从回调的data
参数中的服务器检索哪种数据
2发送的数据
如上所述,您需要传递值对或URL编码的字符串。如果您打算使用GET,那么您可以传递URL编码的字符串,但这意味着您必须在CI函数上包含参数,如:
function search($term)
然后CI自动路由传入的参数。但是既然你想要发布POST,那么你将希望通过$this->input->post("name")
如果您在表单或需要发送的多个字段中输入了输入,则更容易将表单序列化:
$.ajax("url", {
type : 'POST',
data : $('#form').serialize(),
dataType : 'json',
success : function(data, status, response) {} error : function(response, status error) {}});
3处理错误
如果您依赖AJAX,请确保返回某种错误或警告,以便您可以抓住客户端:
function search() {
$term = $this->input->post("term")
if($term == FALSE) {
//return a 404 so that you can catch .error on jquery
} else {
echo $term;
}
}
对RESTFul应用进行研究。它会帮助你理解这一点。 this is a good starting point虽然你的问题与此并不完全相关,但在你的应用程序上设置单独的层是一个很好的做法,这样你只需要从后端使用数据,处理情况,然后在前端做出相应的反应,是的,你只需使用javascript发送,接收和列出数据。如果您正在使用CI或任何其他MVC框架,那么您不应该真正在控制器上生成HTML,这就是视图的用途。