当前位置: 首页 > 知识库问答 >
问题:

等待AJAX响应后再继续

吕岳
2023-03-14
function ajax_call(page, target_tag, data)
{
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function()
    {
        if (xhttp.readyState == 4 && xhttp.status == 200)
        {
            target_tag.innerHTML = xhttp.responseText;
        }
    };
    xhttp.open("POST", page);
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send(data);
}

function edit_gallery(gallery)
{
    var target_tag= document.createElement("div");
    target_tag.style.position= "fixed";
    target_tag.style.top= "10px";
    target_tag.style.backgroundColor= "#FFFFFF";
    target_tag.style.padding= "10px";
    target_tag.style.margin= "0px auto";
    target_tag.id= "gallery_edit_window";

    document.getElementsByTagName("BODY")[0].appendChild(target_tag);
    ajax_call("/everythingapps/imagegallery/edit_gallery.php", target_tag, gallery);
    document.getElementById('gallery_save_btn').addEventListener('click', function() {save_gallery();});
}

function save_gallery()
{
    alert('test');
}
ajax_call("/everythingapps/imagegallery/edit_gallery.php", target_tag, gallery);
document.getElementById('gallery_save_btn').addEventListener('click', function() {save_gallery();});

有什么想法吗?没有JS库。

编辑:我做了几次回拨尝试。老实说,我很难理解他们。下面是我的最后一次尝试:

function testing(callback)
{
    callback("/everythingapps/imagegallery/edit_gallery.php", target_tag, gallery)
}
testing(ajax_call);
document.getElementById('gallery_save_btn').addEventListener('click', function() {save_gallery();});

共有1个答案

周翰
2023-03-14

所以这里发生了一些事情。

首先,回调。他们可能很棘手!我发现,最好让你的头脑围绕它们,这一切都是通过将代码从情况中抽象出来,来可视化代码中发生的事情。请接受以下内容(并请原谅):

你在亚马逊上买袜子。一旦你买到了你想要的袜子,你就会穿着它们在城里到处逛,看起来超级华而不实(这是肯定的)。所以你在电脑上找到你想要的最好的袜子,然后点击“购买”。砰!他们两天后就到了。

你把你的新袜子列成这个清单。清单中常见的主题是什么?你拿着袜子!如果没有它们,您就不能做任何这些事情(至少,在列表中是如何指定它们的)。

这个冗长的响应与您的代码有什么关系?那么,看一下您在调用AJAX之后所采取的步骤,以及每一步都依赖于什么。基本上,如果任何代码假设PHP文件中有任何内容,那么在回调函数中需要它。

祝你好运!

 类似资料:
  • 问题内容: 为什么每当我将ajax放入for循环中时,它都无法很好地同步? 例如,我的代码是: 为什么它先调用Ajax查询?是否有可能让ajax查询在继续之前完成?因为它在完成填充之前就清除了数组。:/ 问题答案: 首先,您确实需要了解Ajax调用是如何异步的(这就是Ajax中的“ A”所代表的意思)。这意味着调用仅启动ajax调用(它将请求发送到服务器),其余代码愉快地继续运行。有时,在其余代码

  • 问题内容: 我有一个页面,使用被称为100次(async:true)的jQuery.ajax,问题是,当它们都被加载时,我需要系统等待所有100次调用返回后才能继续。我将如何处理? 提前致谢!:) 更新: 这些调用在for()循环中进行(其中有100个:) 问题答案: 最好的方法是使用。您可以按以下方式使用它: 另外,如果您在数组中拥有所有AJAX调用,则可以使用: 请注意,这至少需要jQuery

  • 我有一个项目,我需要使用一个站点从中获取数据。所以事情是这样的:使用htmlUnit我用我的数据填充文本框,然后我按下锚,它使用ajax下载我需要的内容并动态更改超文本标记语言页面,在模态窗口中显示内容。但是在我使用锚上的. Click()后,我得到了相同的页面,没有更新,在寻找解决方案后,我在网络上发现了这个: HtmlUnit将执行Ajax调用并更新页面。请注意,与常规页面加载不同,Click

  • 问题内容: 我过去一直在努力,今天一直在努力的事情是阻止API / AJAX继续进行,直到您收到响应为止。目前,我正在使用Facebook API。我需要从调用中获取响应,然后将其返回,但是正在发生的事情是,在我从未从API调用中获取响应之前,我的函数正在返回。我知道为什么会这样,我只是想不出如何预防!这是我的代码… // -----编辑 我注意到有人建议这样的事情… 但这返回未定义 //根据更新

  • 问题内容: 如何让selenium等待日历小部件的加载?现在,我只是在将测试用例导出到junit程序后进行操作。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用

  • 问题内容: 如何让硒等待日历小部件的加载?现在,在将测试用例导出到junit程序后,我只是在做一个。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用