7

jQuery 1.9.1 AJAX + icanhaz/mustache の実例を作ろうとしています。これは私のテンプレートです:

<script id="user" type="text/html">
    {{#users}}<li>Username: {{ username }}, fullname: {{ fullname }}</li>{{/users}}
</script>

これは私のJavaScriptです:

$(document).ready( function() {
    $("#user-btn").click(function() {
        $.ajax({
            type: "GET",
            url: "../php/client/json.php",
            data: {
                type: "users"
            }
        }).done(function( response ) {
            var element = $('#dialog-message');
            element.html("<ul>");
            element.append(ich.user(response));
            element.append("</ul>");
        });
});

このアドレスからの AJAX 応答は次のようになります。

{"users":[{"username":"jd","fullname":"John Doe"},{"username":"jl","fullname":"John Lennon"}]};

次のコードでは、icanhaz は何もレンダリングできません。javascript コンソールでしばらく過ごしたところ、 が期待どおりであることがわかりtypeof responseましstringobject。Icanhaz は object も想定しています。そのため、正しい応答をレンダリングできませんでした。

私は何か間違ったことをしていますか、それとも jquery.ajax が常に文字列応答を返すことを知らなかった貧しい初心者ですか? もしそうなら、私はそれらをどのように扱うべきですか?

4

3 に答える 3

14

AJAX 呼び出しから が返される場合はstring、 を追加する必要がありますdataType: "json"。これにより、可能であれば、jQuery は応答を JSON として解析します。

$(document).ready( function() {
    $("#user-btn").click(function() {
        $.ajax({
            type: "GET",
            url: "../php/client/json.php",
            data: {
                type: "users"
            },
            dataType: "json"
        }).done(function( response ) {
            ...
        });
});

ich.userメソッドが 1 つのユーザー オブジェクトだけでなく、ユーザーの配列を想定していることは確かですか?

于 2013-03-27T23:49:37.137 に答える
3

のオプションdataType: "json"を試してください$.ajax

于 2013-03-27T23:48:37.157 に答える
2

クリック機能を変更します。

$("#user-btn").click(function () {
    $.ajax({
        type: "GET",
        url: "../php/client/json.php",
        data: {
            type: "users"
        },
        dataType: 'json',
        success: function (data) {
            // Your code...
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(textStatus);
        }
    });
});
于 2013-03-27T23:53:15.893 に答える