代码适用于除Firefox以外的所有浏览器

-2 javascript php mysql firefox jquery

我一直在研究一个非常大的html表单,它有一个重置按钮.在重置时,会发生数据库操作.

我有一个javascript函数,在重置时调用:

function clearDatabaseOfAnySavedForm() {
    window.name = 1;                        
    $.post('assets/scripts/reset-form.php');    
    window.location.reload();
    $(document).load().scrollTop(0);            
    return false;
}
Run Code Online (Sandbox Code Playgroud)

此函数中引用的php文件的代码是:

<?php
    //Authcate
    $authcate = xxxxx;  

    $username = "xxxxx";
    $password = "xxxxx";
    //$hostname = "xxxxx";  
    $hostname = "xxxxx";  
    $database = "xxxxx";
    $conn = mysql_connect($hostname, $username, $password);
    mysql_select_db($database, $conn) or die( "Unable to select database");  

    if (!empty($authcate)) {        
        $table = "xxxxx";

        $sqlSelectQuery = "SELECT * FROM $table WHERE authcate = '$authcate'";
        $selectResults = mysql_query($sqlSelectQuery);
        $selectNumResults = mysql_num_rows($selectResults);
        if ($selectNumResults > 0) {
            $sqlUpdateQuery = "DELETE FROM $table WHERE authcate = '$authcate'";
            $result = mysql_query($sqlUpdateQuery);
        } 
    }
    mysql_close($conn); 
}
Run Code Online (Sandbox Code Playgroud)

所有这些都适用于所有浏览器,但由于某种原因,PHP文件不会在Firefox中调用.有没有人有任何建议的想法?

epa*_*llo 7

您的代码充满了竞争条件和不可能的步骤.我很惊讶它会在其他浏览器中运行.

function clearDatabaseOfAnySavedForm()
{
    window.name = 1;                        
    $.post('assets/scripts/reset-form.php'); <-- call server with asynchronous call  
    window.location.reload();  <-- reload page, it will cancel out the server call
    $(document).load().scrollTop(0); <-- um page is been reload, what does this do ?
    return false;  <-- page is reloaded, what are you cancelling?
}
Run Code Online (Sandbox Code Playgroud)

只有这样才能确保运行服务器上的代码才能确保回调发生,而不是重新加载页面.post请求是异步的.无法保证浏览器会执行它.当页面退出并杀死它们时,大多数浏览器将采用任何打开的连接.这就是Firefox没有执行它的原因.

在Firefox中你正在失去竞争条件.进行调用,在完成连接到服务器之前,请求被切断,因此浏览器可以发送刷新页面的请求.您需要等待请求与服务器建立连接.你需要等待readyState至少达到2.

但是,为什么甚至打扰进行Ajax调用,向页面提交发布请求.该页面将重新加载并重定向回您来自的位置.Ajax不是正确的解决方案.