2012-09-25 36 views
0

我有一个窗体包含一个可变数量的文本框包含一个id。当用户退出该页面时,服务器上的文件将被一个python脚本(delete.py)删除。要删除的文件的文件名包含id,因此必须将id传递给python脚本。如果我的表单有一个单一的ID,那么一切正常,并且服务器上的文件被删除。如果我的表单有多个ID字段,则不会删除任何文件。如果我使用萤火虫遍历代码,则无论id字段的数量如何,文件都会被删除。我不明白发生了什么事。任何帮助将不胜感激。我的onbeforeunload方法如下。AJAX:使用多个表单条目来删除多个服务器文件

function deleteFiles() 
    { 
    var xmlhttp; 

    if (window.XMLHttpRequest) 
    { 
    xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    { 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    allElements = document.getElementsByName("id"); 
    for (x=0; x < allElements.length; x++) 
    { 
    xmlhttp.open("GET","/cgi-bin/delete.py?id=" + allElements[x].value,true); 
    xmlhttp.send(); 
    } 

window.onbeforeunload = deleteFiles; 

回答

0

听起来像请求的发送速度太快。尝试添加
xmlhttp.async = false;

function deleteFiles() 
    { 
    var xmlhttp; 

    if (window.XMLHttpRequest) 
    { 
    xmlhttp=new XMLHttpRequest(); 

    } 
    else 
    { 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    allElements = document.getElementsByName("id"); 

    xmlhttp.async = false; 

    for (x=0; x < allElements.length; x++) 
    { 
    xmlhttp.open("GET","/cgi-bin/delete.py?id=" + allElements[x].value,true); 

    xmlhttp.send(); 
    } 

window.onbeforeunload = deleteFiles; 

让我知道你发现

+0

如果我这样做,你展示,并有多个ID,只有1个文件被从服务器上删除。 –

+0

我试过这个:xmlhttp.open(“GET”,“/ cgi-bin/delete.py?id =”+ allElements [x] .value,false);然后服务器上的所有文件都被删除。为什么这必须设置为false才能删除所有文件? –

+0

编辑:那个虚假的参数做同样的事情。将async属性设置为false。它们会被删除,因为发生了什么,在for循环中,您正在向该服务发送请求。当for循环运行时,xmlhttp发送请求的速度如此之快,以至于它们中的一些甚至没有发送请求。不完全确定为什么,但async属性设置为false意味着,而不是异步发送请求(在同一时间...)同步发送它们(行...) – sircapsalot