【问题标题】:Can't parse JSON data structure in JavaScript无法在 JavaScript 中解析 JSON 数据结构
【发布时间】:2011-07-23 10:25:55
【问题描述】:

如何将值传递回使用 Ajax 发布到服务器的表单?

在视图中(如下所示),我只是返回一个简单的数据结构来测试事物:

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.rowsdata.total 返回未定义?

【问题讨论】:

    标签: javascript python django json


    【解决方案1】:

    因为data 是一个字符串(JSON) - 请注意您的第一个alert() 的输出。

    尝试类似:

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

    【讨论】:

    • 没错。你把数据传回来了。但只有字节(在这种情况下,解释为字符串,表示 JSON 格式的内容)可以通过 Internet 传输。在接收端,您需要解释此结果。我很困惑,因为您的问题是“无法解析...”,但代码实际上并没有尝试来解析数据。
    【解决方案2】:

    也许会

    data = JSON.parse(data);
    

    别忘了为旧版浏览器添加json2.js

    这取决于wl_Form 的作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-22
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多