使用AJAX和CodeIgniter发送信息

时间:2014-06-20 15:07:17

标签: php jquery ajax codeigniter

嘿伙计们我正在构建一个应用程序,我在其中通过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;
}

4 个答案:

答案 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通常是个坏主意。相反,尝试只管理服务器端数据并在客户端执行所有前端。

现在,对于错误:

  1. 成功回调需要3个参数
  2. 您需要在.ajax调用
  3. 的数据参数中传递键值对
  4. 确保您在控制器上正确处理错误,因为如果出现问题,您将获得一个html文档作为CodeIgniter的响应,您将花费大量时间调试javascript以查明错误实际上是服务器 - 侧
  5. 1回调:

    您的成功回调函数应如下所示:

    function (data, status, response) {
    
    }
    

    其中:

    • 数据是您从控制器方法回显的内容。你可能想要JSON。
    • 状态会告诉您HTTP响应消息(例如“未找到”是404代码的状态,“200代码是否成功”)
    • 响应是jquery包装的XmlHttpRequest对象,它为您提供了少量事务信息,例如response.responseText会为您提供从PHP输出的任何内容,response.responseJSON会为您提供一个JSON对象若你回应了一个json编码对象等。

    你为什么要关心?因为这些额外的参数可以让你决定你的后端是否出现问题所以你可以处理客户端的情况而不会让用户想知道你的应用程序是否不起作用。更糟糕的是,在浏览器的状态栏上显示臭名昭着的红叉。

    如果您设置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,这就是视图的用途。