2012-09-16 102 views
0

我有一个HTML页面,其中包含一个形式,我想,当表单成功submited,显示下面的div:提交一个表单的jQuery功能

<div class="response" style="display: none;"> 
    <p>you can download it<a href="{{ link }}">here</a></p> 
</div> 

我也有一个jQuery函数:

<script type="text/javascript"> 
     $(function() { 
      $('#sendButton').click(function(e) {    
       e.preventDefault(); 
       var temp = $("#backupSubmit").serialize(); 
       validateForm(); 
       $.ajax({ 
        type: "POST", 
        data: temp, 
        url: 'backup/', 
        success: function(data) { 
         $(".response").show(); 
        } 
       }); 
      }); 
     }); 

</script> 

和我的views.py(后面的代码)我创建一个链接并将其传递给html页面。我有:

def backup(request): 
    if request.is_ajax(): 
     if request.method=='POST': 
      //create a link that user can download a file from it. (link) 
      variables = RequestContext(request,{'link':link}) 
      return render_to_response('backup.html',variables) 
     else: 
      return render_to_response('backup.html') 
    else: 
     return render_to_response("show.html", { 
      'str': "bad Request! :(", 
      }, context_instance=RequestContext(request)) 
backup = login_required(backup) 

我的问题:似乎我的看法不执行。它不会显示我发送到此页面的链接。似乎只有jQuery功能被执行。我很困惑。我怎么能让他们两个执行(我的意思是jQuery功能,然后我设置在这个功能,这使我的看法执行的网址。)

我不知道如何使用序列化功能。每当我搜索,他们写道:

的.serialize()方法创建在标准URL编码符号的文本串,并且产生的查询字符串,如“a = 1时& B = 2 & C = 3 & d = 4 & E = 5。

我不知道什么时候我不得不使用它,而我可以在request.Post访问我的表单字段[“字段名”]。我不知道是什么应该是成功的数据:功能(数据)在我的情况下。

非常感谢fo你的帮助。

回答

1

你必须获得并显示你的Ajax POST功能,其中data是你通过你的Django服务器呈现响应的data,例如:

t = Template("{{ link }}") 
c = Context({"link": link}) 
t.render(c): 

你的JS/jQuery的应该成为这样的事情:

<script type="text/javascript"> 
    $(function() { 
     $('#sendButton').click(function(e) {    
      e.preventDefault(); 
      var temp = $("#backupSubmit").serialize(); 
      validateForm(); 
      $.ajax({ 
       type: "POST", 
       data: temp, 
       url: 'backup/', 

       success: function(data) { 
        // 'data' is the response from your server 
        // (=the link you want to generate from the server) 

        // Append the resulting link 'data' to your DIV '.response' 
        $(".response").html('<p>you can download it<a href="'+data+'">here</a></p>'); 

        $(".response").show(); 
       } 
      }); 
     }); 
    }); 
</script> 

希望这有助于。

+1

等待队友..我有点困惑你的答案... XD的事情是:当你提交你点击你的'sendButton',你通过你的函数在views.py中收到一个Ajax请求。所以,在这个函数中,你必须生成你的链接并渲染它(没有模板:只是“打印”链接)。一旦它被渲染,这个呈现的信息(=你的链接)将作为'data'(成功函数中的变量)发送。然后将这个新生成的链接添加到您的DIV,然后就可以了。我不确定我是否清楚:S ...告诉我,如果我错了,或者如果它不是你真正想要的。 – Littm

+0

非常感谢。正如你所说的数据是来自服务器的响应,我从views.py收到。你是什​​么意思“t = Template(”{{link}}“) c = Context({”link“:link}) t.render(c):”?我发送链接数据到我的HTML页面通过render_to_response,我的问题是我不知道在哪里接收它在html页面?你能告诉我在哪里可以创建数据(使用链接)在HTML中。如果数据应该是从视图中收到的“链接数据”,那么什么是“数据:温度”?为什么我应该使用“数据:温度”?总是需要使用序列化?对不起,这是我第一次使用这个函数:“>谢谢你的帮助:) – user1597122

+0

aha,你的意思是说,只要我传递一个字典到我的模板(html文件),(这是我的例子中的链接),参数“数据”自动包含链接,如果我发送到字典(链接和s.th其他),“数据”包含两个? – user1597122