10

我觉得学习 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 中的一个示例或其他任何好的示例。

非常感谢 :)

4

2 回答 2

15

您基本上只需将其打印出来,然后通过 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"
});
于 2008-11-21T07:34:22.103 回答
3

我还在 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 安装有关的配置问题引起的,还没有时间调查。

于 2011-12-15T12:49:12.150 回答