对 php SLIM 框架的 JQuery AJAX 调用调用错误函数,没有错误消息


JQuery AJAX call to the php SLIM framework calls the error function, without no error message?

我有这个服务器端 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都会认为调用失败并将我重定向到错误函数,该函数除了空白错误消息外无法为我提供任何内容。

这有什么问题?几天前效果很好!

您的问题可能是您的根 URL 以/结尾,并且您在添加的 url 的开头再次出现/hello(因此将请求 URL root//hello),或者dataType: "text json"也可能有问题。我总是只使用对我有用的dataType: "json"

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

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

如果将其更改为:

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

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

怪得要命。

不过感谢您的帮助!

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

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

JQuery 中有一个参数 -

jQuery.support.cors = true;

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