Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
_重映射忽略是_AJAX调用吗?_Ajax_Codeigniter_Post_Controller_Remap - Fatal编程技术网

_重映射忽略是_AJAX调用吗?

_重映射忽略是_AJAX调用吗?,ajax,codeigniter,post,controller,remap,Ajax,Codeigniter,Post,Controller,Remap,这个问题很可能是特定于codeigniter的 我有一个名为redirect.php的控制器,它从视图重定向到视图。该控制器大部分都有一个public\u remap函数,该函数使用case语句执行所有重定向。在我将视图中的$.POST发送回控制器之前,一切都很正常。我希望它点击_重新映射,寻找请求来自AJAX的事实,然后按实际情况执行 我有一个是\u AJAX常量,我正在检查它 define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH'])

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

我有一个名为redirect.php的控制器,它从视图重定向到视图。该控制器大部分都有一个public
\u remap
函数,该函数使用case语句执行所有重定向。在我将视图中的
$.POST
发送回控制器之前,一切都很正常。我希望它点击_重新映射,寻找请求来自AJAX的事实,然后按实际情况执行

我有一个
是\u AJAX
常量,我正在检查它

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
但每当我点击页面时,它总是会重新映射到默认值,并将我的请求发送到该页面,当我来回回显和提醒数据时,它基本上会将页面数据返回给我

有什么见解吗

作为参考

php(有更多的代码来定义变量和两个以上的情况,但它没有涉及到这些,而是涉及到'index'/default)

tweetview.php(在redirect.php中的另一种情况下,由redirect controller加载的视图,json_tweets send是一个json变量)

//jquery

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

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

您可以依赖来自的
$this->input->is\u ajax\u request()
,而不是执行所有这些操作。如果您对加载库不感兴趣,这里有一些类似的代码,至少在过去两年中我一直在生产中

$ajax = ($_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest')? true : false;
看看这个字符串,它的
XMLHttpRequest
,jQuery就是前端JS工具包

再补充一点,我通常有一个Ajax调用入口点,所以很明显,我有一个Ajax控制器,并通过它路由所有调用。我为什么要这么做?原因很简单,如果关闭JS,我会确保我的所有表单都提交给服务器上的一个简单的非ajax表单处理程序。如果JS处于启用状态,jQuery/prototype/YUI将控制并向我的ajax控制器发送数据。实际执行所有验证/验证/db交互的终端处理程序是公共代码

case $method == 'IS_AJAX':
您的
$method
不是
是\u AJAX
,具有以下url:

http://localhost/2fb/index.php/redirect
这将使您在没有方法的情况下进入
重定向
控制器(默认为“索引”)。你确实需要:

http://localhost/2fb/index.php/redirect/IS_AJAX
…进入该
案例
。您似乎混淆了常量
IS\u AJAX
与所请求的方法,在检查
索引时,您似乎正确使用了该方法(尽管这与
默认情况相同,因此是多余的)

$method
,或者无论您在
\u remap()
中命名的第一个参数是什么,都将始终是被调用的路由控制器函数

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

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

需要了解更多的情况,请发布你的控制器和你正在使用的javascript。看起来他已经用一个常量做了,这也是我所做的。是的,我的目的是让他使用CI函数/方法来处理我、你和他正在做的事情。有趣的是,我不知道库函数。我在使用库时没有问题,因为我已经加载了输入,我一定会检查它。输入类总是加载的,你不必手动加载。@egfx,我在15天前注意到它,我在过去的2年零7个月里一直在使用CI:(哦,哇,你当然是对的。这就是我在凌晨2点在控制器上编码的结果,我已经好几天没看过了。)我将不得不重新考虑这个策略。是的,基于我对这个问题的困惑,我明白为什么这个答案是有意义的。我已经添加了验证,以使用@kumar建议的另一个单独的ajax控制器,所以这就是我将实际采用的方向。
switch ($method) {
    // case $method === 'index':
    case 'index':
        $this->load->view('main');
    break;
}