2011-07-23 20 views
0

Ajaxを使用してサーバーに投稿されたフォームに値を戻すにはどうすればよいですか?ビューでJavaScriptでJSONデータ構造を解析できません

(下図参照)、私は物事をテストするために、単純なデータ構造を返しています:

def detail(request, widget_id): 

    widget = get_object_or_404(Widget, pk=widget_id) 

    if request.method == 'POST': 
     form = WidgetDetailsForm(request.POST, instance=widget) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect(request.path) # Redirect after POST 
     else: 
      if request.is_ajax(): 
       response_dict = { 
        'page': 1, 
        'total': 2, 
        'rows': 3 
       } 
       json = simplejson.dumps(response_dict) 
       return HttpResponse(json, mimetype='application/json') 

    else: 
     form = WidgetDetailsForm(instance=widget) 

    params = {} 
    params['widget'] = widget 
    params['form'] = form 
    return render_to_response('widgets/detail.html', params, 
           context_instance=RequestContext(request)) 

JavaScriptのテンプレートでは、次のとおりです。

<script type="text/javascript"> 
    /* <![CDATA[ */ 
     // Wait for the DOM to be loaded 
     $(document).ready(function() { 
      // Bind 'myForm' and provide a simple callback function. 
      $('#updateform').wl_Form({ 
       onSuccess: function(data, status){ 
        alert(data); 
        alert(data.page); 
        alert(data.rows); 
        alert(data.total); 
       }, 
       "status": false, 
       "confirmSend": false 
      }); 
     }); 
    /* ]]> */ 
</script> 

私はから次を得ます警告文。

{"rows": 3, "total": 2, "page": 1} 
undefined 
undefined 
undefined 

なぜdata.pagedata.rows、およびdata.totalはundefinedを返すのですか?

答えて

2

dataは(JSONの)文字列なので、最初のalert()の出力に注意してください。

正確
$('#updateform').wl_Form({ 
    onSuccess: function(response, status){ 
     var data = $.parseJSON(response); 
     alert(data); 
     alert(data.page); 
     //... 
    } 
}); 
+0

のようなものを試してみてください。あなたはデータを正常に戻しました。しかし、バイト(この場合は、JSON形式の何かを表す文字列として解釈される)だけをインターネット経由で送信することができます。受信側では、この結果を解釈する必要があります。あなたの質問に「解析できません...」と表示されているので混乱していますが、コードはデータを解析する**試み**を実際には行いません。 –

0

たぶん

data = JSON.parse(data); 

を行うと、古いブラウザ用json2.jsを含んでください忘れてはいけませんか?

wl_Formによって異なります。

関連する問題