【问题标题】:Codeigniter AJAX and POSTCodeigniter AJAX 和 POST
【发布时间】:2011-08-27 18:37:52
【问题描述】:

解决在 codeigniter 中将数据发送到 POST 的 AJAX 脚本的最佳方法是什么?现在我正在通过$this->load->view('AJAX', $data); 使用 AJAX 加载视图,但是视图中没有 UI 或用户操作。它只是通过脚本运行并在脚本加载后返回 POST 数据。我在模型中接收 POST 数据,在其中将值输入数据库并根据数据输出一些其他值。

我需要打开一个真实的视图,设置元标记,然后将用户重定向到另一个网站。

我该如何解决这个问题?

我面临的问题是我无法打开另一个视图,因为 AJAX 视图是焦点,但我需要这个 AJAX 视图是临时的,基本上可以完成它并发送到 POST。

是否有任何约定可以让我查找/研究我所描述的内容?如果有的话,让我知道需要什么样的澄清。

【问题讨论】:

    标签: ajax codeigniter post redirect


    【解决方案1】:

    有些人喜欢编写“ajax”控制器并专门向它们发布,但您不需要这样做。您可以在处理非 ajax 请求的同一控制器中处理请求。就个人而言,我只返回 json,但如果这对你更有效,你可以返回 HTML 块。

    您的确切问题含糊不清(实际代码将有助于澄清),但我认为您走错了路。永远不要使用视图来处理任何事情。使用您的控制器层,这是用于处理输入和请求。

    响应 ajax 或非 ajax 请求的控制器方法示例:

    function edit_user()
    {
        $data['status'] = $this->user_model->save();
        if ($this->input->is_ajax_request())
        {
            // return json string with our update status
            // Something like: {"status":true}
            echo json_encode($data);
            exit;
        }
        // Load the non ajax view with the same data
        $this->load->view('users/edit', $data)
    }
    

    $this->input->is_ajax_request()Input class 的函数,它读取$_SERVER['HTTP_X_REQUESTED_WITH'] 并检查其值是否为XMLHttpRequest。仅当它是“ajax”请求时才应如此。

    您可以通过将其包装在类或函数中来使生活更轻松。无论您决定做什么,都不要使用视图层来处理数据。


    我认为我的问题是,如何在没有视图的情况下处理 javascript?如何调用脚本和/或将 JS 代码放在控制器中的什么位置?我觉得在视图中处理代码是错误的方向,但我没有看到其他方法。

    只要可能,您应该将 javascript 代码放在.js 文件中,并使用<script> 标记将其加载到 HTML 文档中。唯一的另一个例外是将它放在“视图”文件中(该文件的唯一目的是构建您的最终 HTML 输出)。换句话说,在放置 javascript 的位置遵循相同的 HTML 规则,并遵循 HTML 所属位置(在视图中)的 MVC 通常约定。 Javascript 代码不属于您的控制器。 Javascript 不处理您的数据,它正在将数据发送到服务器。

    我需要打开一个真实的视图,设置元标记,然后将用户重定向到另一个网站。

    如果你想加载一个视图,然后重定向(我假设一定时间之后),你可以用javascript<meta>标签来做(但不要使用元标记,使用 js)。

    【讨论】:

    • 感谢 Wesley,我在 _remap 函数的 switch 语句中确实有一个 is_ajax_request() 调用。它在脚本加载后被调用。我认为我的问题是,如何在没有视图的情况下处理 javascript?如何调用脚本和/或将 JS 代码放在控制器中的什么位置?我觉得在视图中处理代码是错误的方向,但我没有看到其他方法。
    • 我是否将<script type="text/javascript" src="/js/file.js"></script> 直接放入控制器中?
    • 不,不要那样做。我编辑了我的答案,但没有看到任何代码,我不知道你实际上想要做什么。我怀疑如果你添加它,你会得到体面的帮助。我不知道你现在的问题是什么。
    • 我很乐意向您展示我的代码,但我认为您必须查看所有代码才能了解我想要做什么。可以给我发邮件吗?我正在尝试做一些非常不标准的事情。
    • 对不起,我之前错过了你。我不知道你为什么不能在这里发布?至少概念(您要完成的工作)如果您在适用的代码示例中清楚地解释您的目标,我相信您会得到帮助。在任何情况下,您都可以亲自与我联系——这就是我将电子邮件地址放在我的个人资料中的原因——但我确实建议澄清这篇文章或创建一个新帖子。如果您编辑这个我个人不关心的问题,您可以不接受答案,但如果有其他答案,我会说创建一个新的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多