【问题标题】:Refresh template after ajax deleteajax删除后刷新模板
【发布时间】:2014-01-01 02:46:13
【问题描述】:

我有一个包含一些待办任务的表,我希望能够通过 ajax 删除任务,但我不知道删除后如何刷新我的表。

我已经能够删除一个任务,但在我刷新页面之前我没有看到该任务被删除。我正在向模板发送一些 foo 消息,我可以看到它,但我不知道如何再次发送我的查询结果并将一堆任务发送到模板并在表格中显示它们

这是我的代码

控制器

    class Delete(webapp2.RequestHandler):
    def get(self):
    string_id = self.request.get("task")[12:28]
    task_key = ndb.Key('Task', int(string_id))
    task_key.delete()

    session = Session(self.request)
    user = User.get_by_id(session.email)
    userkey=user.key
    tasks=Task.query(Task.author==userkey)

    response_data = {'message' : 'foo'}

    self.response.out.headers['Content-Type'] = 'text/json'
    self.response.out.write(json.dumps(response_data))
    return

    class MainPage(webapp2.RequestHandler):
    @login_required
    def get(self):
    session = Session(self.request)
    user = User.get_by_id(session.email)
    userkey=user.key
    tasks=Task.query(Task.author==userkey)

    template_values = {
        'tasks': tasks
    }

    template = 'index.html'
    render_template(self,template,template_values)

javascript

 $(document).ready(function(){
 $('.delete-button').click(function() {
   $.ajax({
  type: 'GET',
  url: '/delete',
  data: $('#delete-form').serialize(),
  success: showData,
  error: null
});
return false;
}); 

})

function showData(data){
    $('#prueba').html(data.message)
 }

模板

 <table >
    <thead>
    <tr>
      <th>Nombre</th>
      <th>Descripcion</th>
      <th>Fecha</th>
      <th>Status</th>
      <th></th>
    </tr>
    </thead>
    <tbody>
    {% for task in tasks %}
    <tr>
      <td>{{ task.name }}</td>
      <td>{{ task.description }}</td>
      <td>{{ task.date|datetime }}</td>
      <td>{{ task.status }}</td>
      <td> 
        <form action="#" id="delete-form">
        <input type="hidden" name="task"  value="{{task.key}}">
        <input type="submit" value="Eliminar" class="delete-button">
        </form> 
      </td>
    </tr>
    {% endfor %}
    <tbody>
  </table> 
   <div id="prueba"></div>

【问题讨论】:

    标签: javascript ajax django google-app-engine templates


    【解决方案1】:

    只需刷新页面或在 ajax 中删除后创建一个 Jquery 函数,该函数将从您的视图中动态删除此对象。这只是您拥有的两个选项;)

    例如:

    $.ajax({
      type: 'GET',
      url: '/delete',
      data: $('#delete-form').serialize(),
      success: showData,
      error: null
    }, function() {
                     Your removing function 
                    });
    

    在您的删除功能中,您只需找到要删除的对象并将其删除,例如:

    $(#ObjectName).parents("li:first").remove();
    

    【讨论】:

    • 这可能是一个有效的选项,但我宁愿刷新查询并将其再次发送到模板。我不知道这是否可能,但我想它和其他框架一样,如 rails。
    • @sarts 刷新整个查询除了需要做更多的工作之外并没有额外的好处。有可能,如果您构建另一个请求,在 json 中发送它并通过 ajax 请求将当前页面分层,然后在每次删除后告诉它再次运行该 ajax。但这是一条极其漫长的路,最终与简单地删除是一样的
    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多