首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_remap是否忽略IS_AJAX调用?

_remap是否忽略IS_AJAX调用?
EN

Stack Overflow用户
提问于 2011-08-03 01:06:58
回答 3查看 389关注 0票数 1

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

我有一个名为redirect.php的控制器,它将视图重定向到视图。该控制器在很大程度上有一个公共_remap函数,该函数使用case语句执行所有重定向。在我从视图向控制器发回一个$.POST之前,一切都运行得很好。我希望它命中_remap并查找请求来自AJAX的事实,然后执行它的情况。

我有一个要检查的IS_AJAX常量。

代码语言:javascript
复制
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

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

有什么见解吗?

作为参考,

redirect.php (有更多的代码来定义变量,还有2个案例,但它没有命中这些,它命中了'index‘/ default)

代码语言:javascript
复制
 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 send是一个json_tweets变量)

//jquery

代码语言:javascript
复制
$.post("http://localhost/2fb/index.php/redirect", {'json_tweets': json_tweets},
   function(data) {
     alert(data);
   });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-03 01:57:47

代码语言:javascript
复制
case $method == 'IS_AJAX':

您的$method不是具有此url的IS_AJAX

代码语言:javascript
复制
http://localhost/2fb/index.php/redirect

这将把你带到没有方法的索引控制器(将默认为“redirect”)。你真的需要:

代码语言:javascript
复制
http://localhost/2fb/index.php/redirect/IS_AJAX

...to步进到case。您似乎将常量IS_AJAX与所请求的方法混淆了,在检查index时,您似乎正确地使用了该方法(尽管这与default的情况相同,因此它是多余的)。

无论您如何命名_remap()中的第一个参数,$method都将始终是被调用的路由控制器函数。

编辑:我之前没有提到这一点,但是switch块会计算您传递给它的表达式,所以不需要手动进行比较。示例:

代码语言:javascript
复制
switch ($method) {
    // case $method === 'index':
    case 'index':
        $this->load->view('main');
    break;
}
票数 1
EN

Stack Overflow用户

发布于 2011-08-03 01:50:59

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

代码语言:javascript
复制
$ajax = ($_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest')? true : false;

看看这个字符串,它的XMLHttpRequest和jQuery是前端JS工具包

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

票数 2
EN

Stack Overflow用户

发布于 2011-08-03 01:44:27

试试这个,

代码语言:javascript
复制
    $.ajax({
        type: "POST",
        url: "your function url goes here",
        data: data,
        success: function(html){
              window.location = 'redirect url goes here';
        }
   });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6915777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档