【问题标题】:Codeigniter JQuery AJAX load not working in all browsersCodeigniter JQuery AJAX 加载不适用于所有浏览器
【发布时间】:2012-07-22 09:36:12
【问题描述】:

我正在尝试在 CodeIgniter 2.x 中执行简单的 JQuery AJAX 页面加载

它在不同的网络浏览器中似乎也有不同的响应。注意:这不是不正确的路径问题,页面工作和显示都很好,我使用了 base_url、realurl、手动输入绝对路径和手动输入相对路径,但没有一个能 100% 成功。有时我认为它是 .htaccess 文件,但如果是它,它就不能在所有浏览器中工作,而不仅仅是 1。

现在可以在以下浏览器中使用:

  • Chrome - 不工作
  • IE 9 - 工作
  • FireFox - 作品
  • Safari - 作品
  • 歌剧 - 作品

我已经为任何希望提供帮助的人在线放置了一个干净的 CI 测试站点/应用程序: 演示(也可以在这里测试,尝试页面上列出的第 1,2 和 3 点并观察控制台输出): http://www.allforthecode.co.uk/dev/CodeigniterJQueryAJAXTest/

文件:

/application/controllers/test.php
/application/views/test.php (loaded in by test.php)
/application/controllers/advert/test2.php (loaded in by the test.php view via JQuery ajax)
/application/controllers/test_root.php (loaded in by the test.php view via JQuery ajax)
/application/views/advert/test2.php (loaded in by test2.php)

testapp/application/controllers/test.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class test extends CI_Controller {

        public function index()
        {
            $this->load->view('test');
        }

    }

?>

/application/views/test.php(由test.php控制器加载)

<!DOCTYPE html>
<html>

    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title>JQUERY AJAX TEST</title>
        <!-- CSS START -->
        <style>
            html, body {
                font-family: arial;
                font-size: 12px;
            }
            #container {
                width: 100%;
                height: 400px;
                border: 2px solid #000000;
                overflow: auto;
            }
        </style>
        <!-- JS INCLUDES START -->
        <script type="text/javascript" src="<? echo(base_url(" includes/js/jquery/jquery-1.7.2.min.js
        ")); ?>"></script>
        <script type="text/javascript" src="<? echo(base_url(" includes/js/functions.js
        ")); ?>"></script>
        <!-- JQuery AJAX START -->
        <script type="text/javascript">
            function loadPage() {
                $url = $("#url").val();
                var request = $.ajax({
                    type: "post",
                    url: $url,
                    data: "t=1234",
                    success: function (data) {
                        trace("#### SUCCESS ####");
                        $("#container").html(data);
                    },
                    error: function (data) {
                        trace("#### ERROR ####");
                        trace("data = " + data);
                        traceObject(data);
                        traceToDiv("#container", "<h2>#### ERROR ####</h2>");
                        traceObjectToDiv("#container", data);
                    },
                    statusCode: function (data) {
                        trace("#### StatusCode ####");
                        traceObject(data);
                        traceToDiv("#### StatusCode ####");
                        traceObjectToDiv(data);
                    },
                    isModified: function () {
                        trace("#### isModified ####");
                    }
                });
            }
            <!-- JQuery AJAX END -->
        </script>
    </head>

    <body>
        <form id="frm">
            <input type="button" value="LOAD PAGE IN BOX" onclick="loadPage();" />
            <input type="reset" value="RESET" />
            <div id="container"></div>
            <b>JQuery AJAX page url target:</b>
            <input type="text" id="url" value="advert/test2"
            />
            <ol>
                <li>
                    <p>Set
                        <b>url target</b>to "test_root" to test load a root page. (WORKS IN CHROME!)</p>
                </li>
                <li>
                    <p>Set
                        <b>url target</b>to "advert/test2" to test load a 1 dir deep controller page.
                        (FAILS IN CHROME!)</p>
                </li>
                <li>
                    <p>Set
                        <b>url target</b>to "../ci.php" to test load a php page outside of the codeigniter
                        framework. (WORKS IN CHROME?!)</p>
                </li>
            </ol>
        </form>
        <br>
        <h3>Test links</h3>
        <ul>
            <li>Browser test link via index.php/
                <br/>
                <a href="<? echo(base_url(" index.php/advert/test2 ")); ?>"><b><? echo(base_url("index.php/advert/test2")); ?></b></a>
            </li>
            <li>Browser test link direct (needs .htaccess to work)
                <br/>
                <a href="<? echo(base_url(" advert/test2 ")); ?>"><b><? echo(base_url("advert/test2")); ?> </b></a>
            </li>
            <li>Browser test link direct (needs .htaccess to work)
                <br/>
                <a href="<? echo(base_url(" test_root ")); ?>"><b><? echo(base_url("test_root")); ?></b></a>
            </li>
            <li>Browser test link direct
                <br/>
                <a href="../ci.php"><b>../ci.php</b></a>
            </li>
        </ul>
        <br>
        <p>Windows 7x64 - Browser results:</p>
        <ul>
            <li>Chrome - Fail</li>
            <li>IE 9.0.8112.16421 64Bit - Success (Compatability view on & off)</li>
            <li>IE 9.0.8112.16421 32Bit - Success (Compatability view on & off)</li>
            <li>FireFox 14.0.1 - Success</li>
            <li>Opera 12 build 1467 - Success</li>
            <li>Safari 5.1.7 (7534.57.2) - Success</li>
        </ul>
    </body>

</html>

/application/controllers/advert/test2.php(由 test.php 视图通过 JQuery ajax 加载)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class test2 extends CI_Controller {

        public function index()
        {
            $this->load->view('advert/test2');
        }

    }

?>    

/application/views/advert/test2.php(由test2.php加载)

Hello I am loaded by JQuery AJAX

../ci.php

<?
    echo("I am a php file echo test from outside of the Codeigniter test site");
?>

Chromes 网络结果为:

http://127.0.0.1/testapp/public/advert/test2 - Method:POST - Status: Failed

附加

此代码适用于 Chrome 的唯一方法是

  1. 如果我为此项目使用 CodeIgniter 框架之外的 html 文件,则 JQuery AJAX 加载工作正常。有什么想法可以在除 Chrome 之外的所有其他浏览器中使用吗?

  1. 如果我将 JQuery 想要加载的页面放在 CodeIgniter 网站的根目录下。所以加载“application/views/advert/test2.php”的“application/controllers/test.php”会起作用,但“application/controllers/advert/test.php”不会?但适用于所有其他浏览器?铬状态 - 0



    有人有什么想法吗?

http://www.allforthecode.co.uk/dev/CodeigniterJQueryAJAXTest/ 尝试一下并尝试页面上列出的第 1,2 和 3 点并观察控制台输出)

邮编:http://www.allforthecode.co.uk/dev/CodeigniterJQueryAJAXTest/CodeigniterJQueryAJAXTest.zip

【问题讨论】:

  • 我刚刚对此进行了测试,1 个控制器调用 1 个视图,并且在该视图中 AJAX 在 codeigniters 站点根目录调用另一个控制器,但它一旦被放入子目录就会失败。仍然没有解决方案。
  • 刚刚在一些不同的浏览器中对此进行了测试,给出了不同的结果:Chrome - 失败。 IE - 有效。火狐 - 失败。 Safari - 有效。歌剧 - 作品。
  • 我刚刚为 AJAX 查询编写了自己的例程,而不是使用带有一些调试功能的 JQuery。 IE 在正确加载页面之前从 xmlHTTP.readyState 1,1,2,3,4 和 xmlHTTP.status 200 开始。 Chrome 进入 readyState 1,4,错误在线包含以下代码:xmlHttp.send(null);
  • Chrome 将加载到位于“application/controllers”文件夹根目录的任何控制器中,但不会加载到其中的子文件夹中。因此,如果我在“application/controllers/test.php”中创建一个在“application/views/advert/test2”中调用的控制器将起作用。但是,如果控制器位于名为“advert/test”的文件夹中,这是 AJAX 调用的 url 路径,那么它将失败。 ???

标签: jquery ajax codeigniter


【解决方案1】:

发现问题...浏览器插件/插件...

如果您在 firefox 和 chrome 上安装了 adblock,它将破坏许多 AJAX 查询。

在我的例子中是“AdBlock”。

关闭它们,一切都很好......

【讨论】:

  • 哈。好吧,我猜你下次有地方可以开始了:P
猜你喜欢
  • 2012-12-09
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多