Не удается разобрать структуру данных JSON в JavaScript - PullRequest
0 голосов
/ 23 июля 2011

Как передать значения обратно в форму, отправленную на сервер с помощью 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.page, data.rows и data.total возвращают неопределенное значение?

Ответы [ 2 ]

2 голосов
/ 23 июля 2011

Поскольку data является строкой (в формате JSON), обратите внимание на вывод вашей первой alert().

Попробуйте что-то вроде:

$('#updateform').wl_Form({ 
    onSuccess: function(response, status){
        var data = $.parseJSON(response); 
        alert(data);
        alert(data.page);
        //...
    }
});
0 голосов
/ 23 июля 2011

Может быть

data = JSON.parse(data);

и не забудьте включить json2.js для старых браузеров?

Это зависит от того, что делает wl_Form.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...