【问题标题】:Codeigniter + Ajax(jquery) quizCodeigniter + Ajax(jquery) 测验
【发布时间】:2015-12-23 23:23:57
【问题描述】:

我正在为儿童开发测验。我需要帮助来添加 ajax 和 jquery 来处理数据而不是获取整页。只需在一页内获取。问题是更改 $quiz 以加载到 JSON 然后加载到 ajax 添加事件处理程序等等。帮助将不胜感激......编程新手......

【问题讨论】:

  • 欢迎来到 StackOverflow!我们需要您遇到的特定问题的minimal, complete, and verifiable example,以便能够提供帮助。请阅读How To Ask 页面了解更多信息。
  • 我需要帮助更改应用程序以使用 ajax/jquery。从,严格需要改变的是仅在单个页面中加载应用程序。更改控制器和视图以使用 jquery/ajax 来获取测验以查看问题和答案。
  • 这个问题对于 StackOverflow 来说太宽泛了。它需要是一个特定的编程问题。 See this page 获取适合本网站的问题示例。
  • 问题是更改 $quiz 以加载到 JSON 然后加载到 ajax
  • 我知道这就是你想要做的,但这不是一个编程问题。您没有遇到我们可以帮助您解决的特定错误或错误。一旦项目进行得足够远,我们将非常乐意协助解决特定问题。同时,我建议打开 jQuery、AngularJS 或 React 教程。祝你好运!

标签: php jquery ajax codeigniter codeigniter-2


【解决方案1】:

听起来您更像是在寻找关于 AJAX 如何与不同事物交互的基本概述。如果您在 CodeIgniter 中工作,那么您显然熟悉 MVC 编程模型,其中:

controller -> makes my decisions

model -> interacts with my database, etc

view -> displays my information

因此,您希望实现 AJAX 将您需要的内容加载回视图,而不是刷新页面并遵循该路径,更像是:

controller -> loads model and view

model -> interacts with database, etc

view -> displays my information

AJAX with JavaScript -> Loads a new controller path

secondary model -> loads new information

secondary view -> returns to be displayed on first view

您的出发点是设置您的控制器、模型和视图以创建您想要的访问点。

例如,您希望根据用户选择的测验动态加载一组呈现的问题。您将拥有一个主视图(我们可以称之为仪表板)。我们将使用一个控制器来加载名为dashboard.php的主视图

仪表板.php

Dashboard.php 控制器将默认加载我们的主视图。

class Dashboard extends CI_Controller {

    /**
    * Dashboard index() function loads by default 
    * and shows our dashboard view.
    */
    public function index() {
        $this->load->view('dashboard-view.php');
    }

}

dashboard-view.php

我们将使用仪表板视图来做两件事。设置一个基本的页面架构,提供链接以通过 AJAX 加载我们的测验问题,并加载一个 loadQuiz.js,它将进行 AJAX 调用

<html>
<head>
    <title>My Quiz</title>
    <script type="text/javascript">jquery.min.js</script>
    <script type="text/javascript">quizLoader.js</script>
</head>
<body>

    <a href="javascript: void(0);" data-quiz="1" class="loader">Load Quiz 1</a>
    <a href="javascript: void(0);" data-quiz="2" class="loader">Load Quiz 2</a>
    <a href="javascript: void(0);" data-quiz="3" class="loader">Load Quiz 3</a>

    <div id="questions">
        [we will load our questions here]
    </div>

</body>
</html>

loadQuiz.js

我们的 loadQuiz.js 将有一个事件监听器附加到我们的 .loader 锚标记。然后它将读取data-quiz 属性并发送AJAX 请求以加载该测验ID 的问题。处理程序完成后,我们会将数据放入&lt;div id="questions" /&gt; 以显示给用户。

$( document ).ready( function() {

    // Event Listener for Anchor Tags with .loader class
    $( document ).on('click', '.loader', function() {

        var target = $( '#questions' );

        var quizID = $( this ).attr( 'data-quiz' );
        var datastring = '?quizID=' + quizID;

        // Send our AJAX REQUEST
        $.ajax({
            url: '/path-to-ajax-controller',
            type: 'POST',
            data: datastring,
            async: true,
            success: function(response) { // put our response in our target
                target.html(response);
            },
            error: function(e) { // Show an error if we got one
                target.html( 'Failed to load: ' + e.responseText );
            }
        });

    });

} );

现在我们需要解决加载实际测验内容的问题。所以我们将只使用第二个控制器和简单视图来创建我们想要返回给 AJAX 调用的数据。

ajax.php

控制器加载我们的问题并传递给一个简单的视图。这假设您有一个模型,可以将您的问题从数据库或其他方式中加载出来。最终结果是 $data['html'] 应该是 &lt;html&gt; 标记。

注意下面的$data['html'] 只是通过echo 语句获取输出,但您可以将其加载到另一个视图文件中进行格式化。这里的底线是,无论这个函数显示什么,都会在我们的$.ajax() 函数中作为response 返回。

class Ajax extends CI_Controller {

    /*
    * This function should be called by the url we specificed in our
    * $.ajax() call in our loadQuiz.js
    * you can do this with the CI routes if you need to
    */
    function loadQuiz() {
        $this->load->model('quiz_model'); // Have a function here for loading your quiz itself

        $quiz_id = $_POST['quizID'];
        $data['html'] = $this->quiz_model->renderQuestions($quiz_id);

        echo $data['html'];

    }

}

我希望这会有所帮助。祝你好运!

【讨论】:

  • 谢谢莱昂内尔。你的个人邮箱是什么。所以,我以后可以问你一些事情。您是一位出色的建筑师。
猜你喜欢
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2011-09-18
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2016-09-08
相关资源
最近更新 更多