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 は 1 つだけです。

今、私はこのクライアント側の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);
}

また、かなり簡単です。

jQueryによるAJAX呼び出しにバインドされたボタンを保持するこのHTMLのものがあります:

<!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 が で終わり/、追加した URL の先頭に/hello再び があること (URLroot//helloが要求されるため) であるか、またはdataType: "text json". 私はいつも自分に合ったdataType: "json"ものを使っていました。

また(しかし、それは単なるフォーマットの問題です)、この行をもう少しPHPスタイルにすることもできます:(コードが多いことは知っていますが、読みやすく、PHPのように見えると思います... :D)

echo '{"こんにちは": ' . 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 とは異なる 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 に答える