1

这个问题很可能是特定于 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');

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

有什么见解吗?

以供参考,

重定向。

 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发送是一个JSON变量)

//jQuery

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

3 回答 3

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 控制器。实际执行所有验证/验证/数据库交互的最终处理程序是通用代码。

于 2011-08-02T17:50:59.010 回答
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(尽管这与default情况相同,所以它是多余的)。

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

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

switch ($method) {
    // case $method === 'index':
    case 'index':
        $this->load->view('main');
    break;
}
于 2011-08-02T17:57:46.790 回答
0

试试这个 ,

    $.ajax({
        type: "POST",
        url: "your function url goes here",
        data: data,
        success: function(html){
              window.location = 'redirect url goes here';
        }
   });
于 2011-08-02T17:44:26.703 回答