0

私のアプリケーションの一部は、いくつかの材料を取り込んで、関連するレシピを吐き出します。AJAXのみを使用するように変換しようとしています。JSON で返されるデータを解析し、フロント エンドで使用するためにデータにアクセスする際に問題が発生しています。

Django views.py の私のコードは次のようになります。

recipes = Recipe.objects.all() #shortened to all objects for example purposes
import simplejson
data = ''    
for r in recipes:
        the_date = r.date_created.strftime("%b %d")
        recipe_dict = { 'id' : r.id,
                    'name' : r.name,
                    'user' : r.user.username,
                    'date_created' : the_date,
                    'votes' : r.votes,
                    'slug' : r.slug }
        data += simplejson.dumps(recipe_dict)+'\n'

        return HttpResponse(data)

私のJavaScriptは次のようになります:

//request an updated list of recipes with AJAX
$.get('/recipes/discover', { 'ingredients': ingredients },

    //display these new relevant recipes
    function(recipes){
        $.each(recipes, function() {
                $("#results").append("<li id='recipe-"+ this.id +"'>"+ this.name +"</li>");
        })
    })
    .complete(function(){ $('#loading_spinner').fadeOut(1000); })
});

この方法で取得した出力は、JSON 応答の各文字のように見えるものの新しい li を提供することになります....each()各文字を通過します。

私もjQuery.parseJSON(data);それぞれを実行する前に使用してみましたが、これは JSON レシピが 1 つしか返されない場合にのみ機能するようです。JSON で何かが間違ってフォーマットされていると思いますか、それとも正しく解析していませんか?

前もって感謝します!

4

1 に答える 1

2

JSON 内のオブジェクトはカンマで区切り、配列は [] で囲む必要があります。

返された JSON は次のようになります。

{'name': ... }{'name':...}

次のようになります。

[{'name': ... },{'name':...}]

そのため、単一のレシピは有効な JSON オブジェクトであるため正しく解析されますが、複数のレシピは機能しません。

有効な JSON であれば、jQuery.parseJSON(...) は正しく動作します。

これはJSONリファレンスです。

于 2011-02-11T18:41:47.307 に答える