Javascript 在何处或何处刷新视图?

Javascript 在何处或何处刷新视图?,javascript,php,mysql,dom-events,Javascript,Php,Mysql,Dom Events,我有一个MySQL表单,有一个拖放热点和几个图像标签。数据字段只是一个char(100),用于存储上传图像文件的链接。对于每个图像标签,我都有一个删除图像的按钮。它依次调用确认对话框,如果确认,则调用Javascript函数删除图像。Javascript函数调用一个单独的PHP文件来执行对MySQL表的更新。我想做的是在执行完所有这些之后刷新视图。我在谷歌和这个网站上搜索过,并尝试过许多声称有效的版本。但到目前为止,我什么也没找到。我不想使用meta标记,因为我发现如果你试图上传一个图像,它总是

我有一个MySQL表单,有一个拖放热点和几个图像标签。数据字段只是一个
char(100)
,用于存储上传图像文件的链接。对于每个图像标签,我都有一个删除图像的按钮。它依次调用确认对话框,如果确认,则调用Javascript函数删除图像。Javascript函数调用一个单独的PHP文件来执行对MySQL表的更新。我想做的是在执行完所有这些之后刷新视图。我在谷歌和这个网站上搜索过,并尝试过许多声称有效的版本。但到目前为止,我什么也没找到。我不想使用meta标记,因为我发现如果你试图上传一个图像,它总是会在你完成上传之前刷新

事实上,除了执行刷新的时间外,其他一切都正常工作。我假设,从逻辑上看,一旦PHP更新函数完成,就应该执行刷新了。但到目前为止,我还无法从外部PHP获得Javascipt刷新函数。从最初的Javascipt函数来看,它似乎没有等到PHP完成后才从那里调用刷新。换句话说,就像最后几行:

ajaxRequest.open("GET", "AjaxDeleteImage.php" + queryString, true);
ajaxRequest.send(null);
//window.location.reload(true);

在那里你可以看到我注释掉了重新加载。我在那里试过了,但它把一切都毁了。如果需要的话,我很乐意包含更多的代码。也许我的方法太复杂了,如果需要的话,有人可以给我一个快速的提示。

AJAX调用是异步的,所以一旦请求发出,脚本的其余部分就会继续执行。这通常是一件好事,否则页面将一直挂起,直到AJAX完成

要在AJAX请求完成时执行操作,需要分配回调函数。这将在AJAX完成后运行。或者更准确地说,当AJAX请求状态改变时

我把这个从:

在您的情况下,您可以将
xmlhttp
更改为
ajaxRequest

onreadystatechange
属性需要一个函数,只要AJAX请求的状态发生变化,就会调用该函数。有5种不同的状态,但您感兴趣的是
4
,因为这是“我完成了!”状态。上面的函数检查此状态,还检查从服务器返回的http状态代码。如果是200,生活是美好的,你可以做你需要做的事情。调用
.send()
之前应声明回调

您还可以检查其他状态代码并做出相应的反应(例如,如果存在404或500状态代码,则弹出一个错误,或者将页面重置为已知的良好状态,以便用户可以重试)

另一方面,JQuery等库将AJAX功能包装成一些非常易于使用的函数。一个简单的JQuery示例:

$.get('myurl.php')
.done(function() {
    alert( "success" );
})
.fail(function() {
    alert( "error" );
})
.always(function() {
    alert( "complete" );
});
如您所见,您可以在一条简单的语句中执行
GET
请求并定义所有处理程序。如果你只关心成功,你可以把它缩短为:

$.get('myurl.php', function(){
    alert('success');
});

您需要使用JavaScript刷新页面,作为AJAX的成功回调。只有当你的PHP脚本完成并通知你的页面它成功后,才会调用它。谢谢大家的帮助。我不想承认这一点,但我是Ajax、jQuery和所有这些好东西的新手,但我正在学习。我会想办法投票,并给大家一些反馈。哦,是的,我让它工作了。伟大的再次感谢你,艾德。对!正确的!我找不到按钮了,duh!再次感谢你,彼得。我可以在拖放上传脚本上使用相同的功能。于是,两个问题解决了。预计起飞时间。
$.get('myurl.php')
.done(function() {
    alert( "success" );
})
.fail(function() {
    alert( "error" );
})
.always(function() {
    alert( "complete" );
});
$.get('myurl.php', function(){
    alert('success');
});