学习如何通过 CodeIgniter 使用 AJAX

Posted

技术标签:

【中文标题】学习如何通过 CodeIgniter 使用 AJAX【英文标题】:Learning how to use AJAX with CodeIgniter 【发布时间】:2010-09-23 09:51:23 【问题描述】:

我觉得学习 javascript 这么难有点尴尬,但是..

假设我有一个非常简单的控制器:

class front extends Controller 

    public function __construct()
    
        parent::Controller();   
    

    public function index()
    
        //nothing!
    

    public function test () 

        $someNumber = $this->input->post('someNumber');

        if ($someNumber == 12)  return TRUE; 

    


是的,这可能会写得更好,哈哈。

我想知道的是 - 我如何使用 JavaScript 在表单中提交一个数字(我稍后会担心验证和模型),我应该如何编写我的 test() 函数以便它返回一些可读的内容JavaScript(我假设 return TRUE 可能不起作用,可能是 XML 或 JSON 或类似的东西?),我如何使用 JavaScript 访问数据?

我知道有像 jQuery 这样的框架可以帮助解决这个问题,但现在我只想从最简单的层面理解它,到目前为止我发现的所有教程和指南对我来说都太深入了. jQuery 中的一个示例或其他任何好的示例。

非常感谢:)

【问题讨论】:

不用担心没有完美的身材 +1 我也觉得 JavaScript 有点挑战性,但你会通过大量练习来实现。 【参考方案1】:

您基本上只需将其打印出来,然后通过 javascript 重新捕获该信息:

public function test() 
    $somenumber = $this->input->post('someNumber');
    if ($somenumber == 12) 
        print "Number is 12";
     else 
        print "Number is not 12";
    

您的 javascript 可能如下所示:

var xhr;
xhr = new XMLHTTPRequest();
xhr.onreadystatechange = function() 
    if (xhr.readyState == 4) 
        // this is where the return information is
        alert('Status: '+xhr.status+' Response: '+xhr.responseText);
    


xhr.open('POST', '/front/test');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('someNumber=12');

上面的代码没有考虑浏览器特定的问题,但至少我相信应该在 firefox/ie7 上运行。

这是上面所有内容的 jQuery 示例:

var options = 
    'someNumber' : 12


$.post('/front/test', options, function(data) 
    alert(data); // should print "Number is 12"
);

【讨论】:

第一个带有 XMLHTTPRequest 的对我不起作用,并且由于 XMLHTTPRequest 未识别而给出错误....或某些东西。但是使用 Jquery 的第二个工作正常。非常感谢。【参考方案2】:

我还在 CodeIgniter 中发现,当使用如上所述的标准 Javascript AJAX 调用时,响应标头中不会返回“XMLHTTPRequest”。

$this->input->is_ajax_request();

除非您使用 jQuery 处理 AJAX POST 请求,否则输入助手永远不会返回 true。

我也试过这篇文章的方法,还是不行:http://developer.practicalecommerce.com/articles/1810-The-Benefit-of-Putting-AJAX-and-CodeIgniter-php-Together

这是我最后用的:

    var query_params = $('#data-form').serialize();
    $.ajax(
        type: 'POST',       
        url: 'process_this.php",
        data: queryParams,
        context: document.body,

    success: function()
        alert('complete'); // or whatever here
    

可能是由与我的 CI 安装有关的配置问题引起的,还没有时间调查。

【讨论】:

以上是关于学习如何通过 CodeIgniter 使用 AJAX的主要内容,如果未能解决你的问题,请参考以下文章

如何使用omnipay通过CodeIgniter实现在线支付?

共享主机上的 CodeIgniter Cron 作业?

如何使用 Codeigniter 通过 cc 发送多封电子邮件?

如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?

在 Codeigniter 中如何通过 ngrok 执行 POST 请求?

如何使用 codeigniter 创建 seo 友好的 url?