【问题标题】:JQuery AJAX call to the php SLIM framework calls the error function, without no error message?JQuery AJAX调用php SLIM框架调用报错函数,没有报错信息?
【发布时间】:2012-06-29 14:31:29
【问题描述】:

我有这个服务器端 SLIM 代码:

require 'Slim/Slim.php';

$app = new Slim();
//$app->config('debug', true);
$app->get('/hello', 'hello');
//$app->post('/addConsultant', 'addConsultant');
$app->run();

function hello() {
    echo '{"hello": ' . json_encode("merp") . '}';
}

很简单吧?我的意思是它只有一个 GET。

现在,我有了这个客户端 Javascript 代码:

var rootURL = "http://somabsolutions.se/dev/index.php/";

$('#btnHello').click(function() {
    $.ajax({
        type: 'GET',
        url: rootURL + '/hello',
        dataType: "text json",
        success: function(data){
            alert("Something " + data);
        },
        error: ajaxFailed
    });

    return false;
});

function ajaxFailed(XMLHttpRequest, textStatus, errorThrown) {
    alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus     + "\nerrorThrown=" + errorThrown);
}

也很简单。

我有这个 HTML 的东西,它包含由 jQuery 绑定到 AJAX 调用的按钮:

<!DOCTYPE HTML>
    <html>
        <head>
            <title>
                Backend test
            </title>
        </head>
        <body>
            <form id="testForm">

                <button id="btnHello">Hello World</button>

            </form>
            <script src="javascript/jquery-1.7.2.min.js"></script>
            <script src="javascript/main.js"></script>
        </body>
     </html>

这玩意,过去一直有效,直到今天,由于某种外星原因停止了!

看,它有效,对吧?

但是每次我按下那个 HTML 按钮时,Ajax 都会认为调用失败并将我重定向到错误函数,该函数除了空白错误消息之外什么都没有提供。

这有什么问题?几天前它工作得很好!

【问题讨论】:

    标签: php jquery slim


    【解决方案1】:

    您的问题可能是您的根 URL 以 / 结尾,而您在添加的 URL 的开头又是 /hello(因此会请求 URL root//hello),或者也可能存在问题与dataType: "text json"。我总是只使用对我有用的dataType: "json"

    另外(但它只是一个格式化的东西)你可以让这一行更像 PHP 风格:(我知道这是更多的代码,但我认为它更容易阅读并且看起来更像 PHP...:D)

    回声'{“你好”:'。 json_encode("merp") 。 '}';

    如果你把它改成:

    echo json_encode(array("hello" => "merp"));

    【讨论】:

    • 感谢您的回复。到目前为止,我已经尝试过“json”和“text json”。我也尝试过对 URL 进行硬编码。
    • 您能尝试获取一些调试信息(例如使用 Firebug)吗?
    • 当然可以,我正在努力在 Chrome 上找到一个好的 URL 发送查看器,一旦我确切知道我发送的 URL 的样子,我就会回来。
    【解决方案2】:

    好的,我认为浏览器或服务器一定有问题,因为现在它可以工作了...... 因此,如果您遇到此问题,请尝试清除所有 Chrome 数据。

    太奇怪了。

    感谢您的帮助!

    【讨论】:

      【解决方案3】:

      好的,现在我明确知道出了什么问题,问题是我试图对一个与当前不同的 URL 进行 REST 调用,我试图从 http://www.something.com/argument 调用 http://something.com/argument

      显然,这足以让 JavaScript 认为它是一个跨域调用,而事实并非如此。

      JQuery中有一个参数-

      jQuery.support.cors = true;
      

      这应该允许跨域调用,或者至少 javaScript 认为是跨域调用,但它对我没有任何作用。我只需要确保 REST 调用来自正确的 URL。

      【讨论】:

        猜你喜欢
        • 2016-11-08
        • 1970-01-01
        • 2014-12-30
        • 2012-10-04
        • 2013-06-18
        • 1970-01-01
        • 2013-10-26
        • 1970-01-01
        • 2015-12-14
        相关资源
        最近更新 更多