django中ajax的成功函数

时间:2012-11-27 08:02:40

标签: django jquery django-views

在观点中:

return render_to_response("main.html", RequestContext(request, {'form':form, "result":result}))

在模板中我有这个jquery函数:

$('#submitButton').click(function(e) {
            e.preventDefault();
            var dataPosted = $("#mainSubmit").serialize();
            $.ajax({
                type: "POST",
                data: dataPosted,
                url: 'main/',
                success: function(data) {
                    $("#mainDiv").html(data);
                    $(".response").html({{ result }});
                    $(".response").show();
                }
            });
        });
    });

<div id="mainDiv" class="part">
    <form id="mainSubmit" action="main/" method="POST" name="submitForm">
        {% csrf_token %}       
            {{ form.non_field_errors }}
            {{ form.as_p }}
        <input type="submit" value="Submit" id="submitButton"/>
        <div class="response"  style="display: none;"></div>
    </form>
</div>

但似乎数据不能像这样分配给响应div(似乎数据没有定义)。所以我不知道将数据发送到模板的方式是什么。如果我在视图中使用Httpresponse(result),那么我不能刷新我的表单,只有我可以在视图中发送的响应div数据中显示。那是什么方式?

编辑: 这是我的看法。之前,如果form.is_valid():我没有为条件设置其他,但是我在这里使用,因为我认为如果我不这样做,它可能会导致一些可能性。我不知道什么是最好的方式。

def mainFunc(request):
    if request.is_ajax():        
        if request.method == 'POST':
           form = mainForm(request.POST)
              if form.is_valid():             
                 // process the form     
                 result = "successful"
                 to_json = {'form':form, 'result':result}
                 return HttpResponse(json.dumps(to_json), mimetype='application/json')
              else:
                  result = ""
                  to_json = {'form':form, 'result':result}
                  return HttpResponse(json.dumps(to_json), mimetype='application/json')
        else:
            form = mainForm()
            return render_to_response('main.html', RequestContext(request, {'form':form}))
    else:
        return render_to_response("ajax.html", {}, context_instance=RequestContext(request))

1 个答案:

答案 0 :(得分:2)

您需要以JSON

等格式返回响应

您可以使用this snippet或更简单的代码:

from django.utils import simplejson
to_json = {'form':form, "result":result}
return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')

然后,您就可以在JS代码中使用data.resultdata.form

如果您对ajax和非ajax调用使用相同的视图,则可以使用request.is_ajax()

进行检查

此外,您将无法在JS回调中使用模板标记和过滤器。因此,您需要在通过JSON发送表单之前预呈现表单

所以最后的代码:

to_json = {'form':form, "result":result}
if request.is_ajax():
    to_json['form'] = to_json['form'].as_p()
    return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')
else:
    render_to_response("main.html", RequestContext(request, {'form':form, "result":result}))

修改我认为ajax.html是整个页面的模板,main.html是页面mainDiv部分的模板

因此,在is_ajax()部分视图中,您可以返回这样的数据。

to_json = {}
to_json['form'] = render_to_string('main.html', {'form': form}, context_instance=RequestContext(request))
to_json['result'] = result
return HttpResponse(json.dumps(to_json), mimetype='application/json')

你总是会返回这样的数据,包括GET和POST AJAX调用

在JS中你会得到这样的数据:

$("#mainDiv").html(data.form);
$(".response").html(data.result);
$(".response").show();