0

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

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

4

3 回答 3

0

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

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

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

如果您将其更改为:

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

于 2012-06-29T14:38:30.690 回答
0

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

诡异如地狱。

不过感谢您的帮助!

于 2012-06-30T18:25:35.677 回答
0

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

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

JQuery中有一个参数-

jQuery.support.cors = true;

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

于 2012-07-02T15:34:10.583 回答