_remap忽略IS_AJAX调用?

时间:2011-08-02 17:06:58

标签: ajax codeigniter post controller remap

这个问题很可能是特定于codeigniter的。

我有一个名为redirect.php的控制器,可以从视图重定向到视图。大多数情况下,此控制器具有一个公共_remap函数,该函数使用case语句进行所有重定向。在我将一个$.POST从视图发送回控制器之前,一切都很顺利。我希望它能够点击_remap并查找请求来自AJAX然后就是这样的事实。

我正在检查IS_AJAX常量。

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

但每当我点击页面时,它总是重新映射到默认值并将我的请求发送到该页面,当我回显并来回警告数据时,它基本上将页面数据返回给我。

任何见解?

供参考,

redirect.php(有更多的代码来定义变量和2个案例,但它没有达到那些,它正在命中'index'/ default)

 public function _remap($method)
        {   

    switch ($method) {
        case $method == 'index':
        $this->load->view('main');
            break;
        case $method == 'IS_AJAX':
        var_dump($_POST);
            break;
        default:
        $this->load->view('main');
            }
        }

tweetview.php(在redirect.php的另一个案例中由重定向控制器加载的视图,json_tweets send是一个JSON变量)

// jquery的

$.post("http://localhost/2fb/index.php/redirect", {'json_tweets': json_tweets},
   function(data) {
     alert(data);
   });

3 个答案:

答案 0 :(得分:2)

您可以依靠http://codeigniter.com/user_guide/libraries/input.html中的$this->input->is_ajax_request()而不是完成所有这些操作。如果你对加载一个库不感兴趣,那么至少在过去的两年里,我的生产代码有点类似。

$ajax = ($_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest')? true : false;

查看字符串,其XMLHttpRequest和jQuery是前端JS工具包

只是为了添加更多,我通常有一个Ajax调用的入口点,所以显然我有一个ajax控制器并通过它来路由我的所有调用。我为什么要这么做?原因很简单,如果关闭JS,我确保所有表单都提交给服务器上的简单非ajax表单处理程序。如果JS打开,jQuery / prototype / YUI将控制并将数据发送到我的ajax控制器。实际执行所有验证/验证/数据库交互的结束处理程序是公共代码。

答案 1 :(得分:1)

case $method == 'IS_AJAX':

您的$method不是IS_AJAX此网址:

http://localhost/2fb/index.php/redirect

这将使您在没有方法的情况下进入redirect控制器(默认为“索引”)。你真的需要:

http://localhost/2fb/index.php/redirect/IS_AJAX

...进入case。您似乎将常量 IS_AJAX与所请求的方法混淆,您在检查index时似乎正确使用该方法(尽管这与{{1}相同} case,所以它是多余的。)

default,或者您在$method中指定第一个参数的任何名称,将始终是被调用的路由控制器函数。

编辑:我之前没有提到这一点,但是切换块会评估传递给它的表达式,因此无需手动进行比较。例如:

_remap()

答案 2 :(得分:0)

试试这个,

    $.ajax({
        type: "POST",
        url: "your function url goes here",
        data: data,
        success: function(html){
              window.location = 'redirect url goes here';
        }
   });