首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在codeigniter 4中使用ajax

如何在codeigniter 4中使用ajax
EN

Stack Overflow用户
提问于 2020-02-08 01:36:47
回答 1查看 10K关注 0票数 2

我正在使用codeigniter-4版本,并试图在导航栏中自动搜索。我正在尝试使用ajax将post方法中的数据发送到控制器中。但这并不管用。和codeigniter 4没有描述ajax的细节。在我的代码示例输入框下面是-

代码语言:javascript
复制
<input class="form-control mr-sm-2" type="search" placeholder="<?= lang('nav.search'); ?>" aria-label="Search" name='s' id="seachBox">

ajax代码是-

代码语言:javascript
复制
     $.ajax({  
       url:<?= base_url('search'); ?>,
       headers:{'X-Requested-With':'XMLHttpRequest'},
       data:{query:query},
       success:function(data){
             alert(data);
       }  
    });

我的控制者是-

代码语言:javascript
复制
<?php
class Search extends BaseController
{
    public function __construct()
    { 
        helper(['common_helper','aws_helper']);
    }

    public function index(){

        echo 'string';
    }
}
?>

路线是-

代码语言:javascript
复制
<?php 

$routes->get('/search', 'Search::index');

?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-08 02:03:06

下面是ajax的示例代码。(确保已为search url定义路由/控制器方法)

代码语言:javascript
复制
$.ajax({  
    url:<?php echo base_url('search'); ?>,
    type: 'post',
    dataType:'json',
    data:{query:query},
    success:function(data){
        alert(data);
    }  
});

获取请求数据的CI4代码

代码语言:javascript
复制
if ($this->request->isAJAX()) {
    $query = service('request')->getPost('query');
    var_dump($this->request->getPost('query'));
}

此外,如果您没有在成功时重新加载页面,请确保在每次请求时都更新csrf token。此外,您还需要在方法中返回csrf令牌。因此,在这种情况下,您的方法将如下所示-

代码语言:javascript
复制
if ($this->request->isAJAX()) {
        $query = service('request')->getPost('query');
        //var_dump($this->request->getPost('query'));
        return json_encode(['success'=> 'success', 'csrf' => csrf_hash(), 'query ' => $query ]);
    }

因此在这种情况下,您的ajax代码将如下所示-

代码语言:javascript
复制
$.ajax({  
        url:<?php echo base_url('search'); ?>,
        type: 'post',
        dataType:'json',
        data:{query:query},
        success:function(data){
           var result = JSON.parse(data);
            $("input[name='csrf_test_name']").val(result['csrf']);
        }  
    });
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60118452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档