2017-10-06 72 views
0

我有一些JavaScript数据,并希望将其发送到Django视图函数。之后,我想使用HttpResponse呈现Django模板,但它是如何工作的?如何使用jQuery将数据发送到Django视图并呈现Django模板?

首先,我用jQuery.ajax()发送了一些数据到Django视图,并使用了响应数据,现在我想在第二个jQuery.ajax()中发送数据 - 点击按钮后 - Django查看功能,并最终呈现一个简单的模板,就像它是如何工作的,如果我点击网站上的简单链接。

我已经尽可能地削减片段为清楚起见

$(matchfield).on('click', function(event) { 
    event.preventDefault(); 
    var field = $(this).val(); 
    $.ajax({ 
     method: "POST", 
     url: "/view-function/", 
     data: { "field": field }, 
     dataType: "json", 
     context: this, 
     success: function (data) { 
      if(data.message === 1) { 
       points = 100 
       $('#submit').on('click', function(event) { 
        event.preventDefault(); 
        $.ajax({ 
         url: "/another-view/", 
         method: "POST", 
         data: {"points": points}, 
         success:function(response){ // I guess the mistake is here 
          $(document).html(response) 
         } 
        }) 
       }) 
      } 
     } 
    }); 
}); 

如果被点击的#submit按钮,响应的状态代码是200和Chrome开发工具显示了完整的预期预览中的新HTML页面(无CSS样式),但在当前页面上没有任何反应。

这是响应:

<!DOCTYPE html> 
<html> 
    <head> 
     // head stuff 
    </head> 
    <body> 
     // Some stuff 
    </body> 
</html> 

我用return HttpResponse(template.render(context, request))

我查看-功能:

from django.http import HttpResponse 

def another-view(request): 
    if request.method == "POST": 
     if request.POST.get("points"): 
      points = int(request.POST.get("points")) 
      template = loader.get_template('my_template.html') 
      context = {'message': "any message"} 
      return HttpResponse(template.render(context, request)) 

这是我的看法功能是如何工作的,点存储在数据库和一些魔术发生,但一切正常,请求状态代码是200.

我不幸不知道我忽略了什么。

来自AJAX(内部ajax()与url:“/ another-view /”)的响应是预期的HTML页面,但在当前页面上没有发生。我想替换整个页面

+0

向我们展示了Python代码用于查看功能。 –

+0

你能展示你的观点吗?从你目前的问题来看,你似乎并不真的需要ajax。 – Sam

+0

好吧,快速浏览一下,你正在检查'points' AJAX查询运行的时间,而不是'field'。你有'如果request.POST.get(“field”):'在任何地方? (对不起,提前点击提交) – Sam

回答

0

我找到了解决方案。重定向到与POST数据Django视图功能,您可以使用jQuery.redirect功能,可用后包括https://github.com/mgalante/jquery.redirect的jquery.redirect.js

用法:

/** 
* jQuery Redirect 
* @param {string} url - Url of the redirection 
* @param {Object} values - (optional) An object with the data to send. If not present will look for values as QueryString in the target url. 
* @param {string} method - (optional) The HTTP verb can be GET or POST (defaults to POST) 
* @param {string} target - (optional) The target of the form. If you set "_blank" will open the url in a new window. 
* @param {boolean} traditional - (optional) This provides the same function as jquery's ajax function. The brackets are omitted on the field name if its an array. This allows arrays to work with MVC.net among others. 
* @param {boolean} redirectTop - (optional) If its called from a iframe, force to navigate the top window. 
*/ 
$.redirect(url, [values, [method, [target, [traditional, [redirectTop]]]]]) 
相关问题