Onbeforeunload - popux框不会显示或触发

时间:2012-02-19 19:26:22

标签: php javascript if-statement

我正在建立一个包含用户个人资料的网站。我现在处于照片部分。当一个人没有问题上传他们的图像时,图片将存储在4个不同的文件夹中。一个尺寸为25,100,150和正常尺寸。在此之后,他们将被重定向到具有新内容的同一页面。这是他们需要裁剪图片的部分。作物部分效果很好,但我遇到了问题。当他们离开网站而没有裁剪时,他们刚刚上传的pciture仍然存储在文件夹中,这不是我想要的。所以我与AJAX交配了一些检查,它将取消已连接的4个文件的链接。我的问题是,这只会在他们离开网站时发生(onbeforeunload。) 这在IE中非常有用,但在Chrome中却不行。(我只测试了两种浏览器。)

以下是我正在做的事情:

function unfinished(album,img){
var xmlhttp;
if (window.XMLHttpRequest){
        // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}else{
        // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        return xmlhttp.responseText;
    }
}
xmlhttp.open("GET","incl/unfinished.php?a=" + album + "&i=" + img,true);
xmlhttp.send();

}

上面的函数通过查询字符串从“uncl / unfinished.php”获取信息。这一切都运作良好。

unfinished.php上的代码:

session_start();
require('../dbconnect.php');
$sql = "SELECT * FROM users WHERE username='".$_SESSION['username']."'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
    $username= $row['brugernavn'];
}
$album = $_GET['a'];
$img = $_GET['i'];
$sourcex = "../users/".$username."/images/".$album."/x-x/".$img;
$source25 = "../users/".$username."/images/".$album."/25/".$img;
$source100 = "../users/".$username."/images/".$album."/100/".$img;
$source150 = "../users/".$username."/images/".$album."/150/".$img;

if(unlink($sourcex)){

}
if(unlink($source25)){

}
if(unlink($source100)){

}
if(unlink($source150)){

}
echo "Error 908. The picture didn't get cropped, and neither saved. Try again.";

AJAX代码和unfinished.php删除任何问题的图像。我已经测试过了。现在我的问题: 我正在通过

运行AJAX代码

代码应该在这里运行:

//function warn(album,img){
window.onbeforeunload = function (e) {
  e = e || window.event;

  // For IE and Firefox prior to version 4
  if (e) {
    e.returnValue = unfinished(album,img);
  }

  // For Safari
  return unfinished(album,img);

};
//}

但是当我尝试返回xmlhttp.responseText时,弹出框没有弹出,我无法看到响应。 但是,如果我将“Hello world”(或某些文字)添加到返回中,例如 return Helloworld!'; e.returnValue ='Hello world!'; , xmlhttp.responseText值,弹出,并显示消息。但它不显示xmlhttp.responseText,因为它不运行 unfinished()函数。

任何解决方案当用户离开页面时我如何运行AJAX? 如果它有帮助,这里是HTML代码:

if($_POST['where'] == "newalbum"){
$nameonalbum = $_POST['nameonalbum'];
}else{
$nameonalbum = $_POST['existingalbum'];
}
$filenamenew=time().'.gif';
?>
<body onload="warn('<?=$nameonalbum?>','<?=$filenamenew?>')">

1 个答案:

答案 0 :(得分:0)

我自己解决了。是这样的:

function unfinished(album,img){
    window.onbeforeunload = function (e) {
         e = e || window.event;
     var response = '';
     var xmlhttp;
     if (window.XMLHttpRequest){
             // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
     }else{
             // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
     }
     xmlhttp.onreadystatechange=function(){
         if (xmlhttp.readyState==4 && xmlhttp.status==200){
             response = xmlhttp.responseText;
     }
     }
     xmlhttp.open("GET","incl/unfinished.php?a=" + album + "&i=" + img,true);
     xmlhttp.send();
     // For IE and Firefox prior to version 4
     if (e) {
         e.returnValue = response;
     }
         // For Safari
     return response;
}
}

但现在我还有另外一个问题......首先卸载功能的效果很好,但我不希望它在单击“保存裁剪”按钮时触发。任何想法如何做到这一点?

保存按钮html: