0

抱歉标题令人困惑,但我找不到更好的方法来解释它..

情况如下:

在函数overview() 中,我使用AJAX 调用以及动态html 来获取数据。在那个 AJAX 成功回调中,我对新的 html 执行某些处理程序。在其中一个处理程序上,我发布了另一个 AJAX 调用。

现在,这是我的问题:我想在第二个 AJAX 成功回调中重新加载第一个 AJAX 调用,以获取我更新的数据。我该怎么做呢?

谢谢

编辑:根据要求,这是我的代码(简化)

function overview() {
    var dataString = '...';
    $.ajax({
        type: 'POST',
        url: 'get-data.php?',
        cache: false,
        data: dataString,
        success: function(data) {
            $('table.table-overview tr.table-heading').after(data);

            $('tr.new-tr span.status').click(function() {
                var dataString = '...';
                $.ajax({
                    type: 'GET',
                    url: 'change-status.php?',
                    cache: false,
                    data: dataString,
                    success: function(response) {
                        if(response == 'saved') {
                            overview();
                        }
                    }
                });
            });
        }
    });
}

已解决:经过反复试验,将我的 .click() 处理程序替换为 .live('click') 使其工作!

4

3 回答 3

2

要回答添加的子问题,当您运行这行代码时

$('tr.new-tr span.status').click(function() {})

您是在告诉浏览器获取当时存在的 每个<span class="status"/>内部 a来附加单击事件侦听器。是不同的(),如果每次点击都在内部,那么您就是说,然后调用该函数(这适用于绑定实时事件时不存在的跨度)。这两种方法在 ajax 回调的成功事件中都不好。您可以先在 ajax 调用之外绑定 live even 监听器,然后相信它只会在 a 内部触发,即使它们是稍后创建的。<tr class="new-tr"/>.[live][1]('click')<span class="status"/><tr class="new-tr"/>

于 2012-10-02T22:03:31.007 回答
0

我相信这就是你所描述的。

function ajax1(callback){

    $.ajax({
        ...
    }).done(callback);

}


function ajax2(callback){

    $.ajax({
        ...
    }).done(callback);

}


function overview(){

    loadAjax1(); // start off the ajax loading

}

function loadAjax1(){

    // get first ajax data
    ajax1(function(resp){

        $('body').html(resp) // put the ajax data in your dom, attach your handlers and such


        // find certain element to bind second ajax call
        $('body.find-your-item').click(function(){

            // when clicked, perform second ajax call, and on callback, recall intial ajax load
            ajax2(loadAjax1);
        });

    })

}
于 2012-10-02T15:55:23.053 回答
0

不确定我是否理解问题。但是你可以链接ajax请求......所以你可以做类似的事情

function func1(){
   $.ajax(){
      url: "whatever.html",
      type: json
      success: func2(data)
   }
 }

 function func2(input){
 //do something with input here

  $.ajax(){
      url: "whatever2.html",
      type: json
      success: func3(data)
   }
  }

我在 ajax 请求中缺少参数,而 func2 中的请求可以从输入参数“input”发布数据。在页面上有多个 ajax 请求应该不是问题,您只需要担心它们何时触发并确保您将正确的数据从一个传递到另一个......

于 2012-10-02T15:49:53.253 回答