2012-11-02 47 views
-2

我一直在研究一个非常大的带有重置按钮的html表单。 重置时,会发生数据库操作。代码适用于除Firefox以外的所有浏览器

我有一个JavaScript的功能,例如,被称为复位:

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

对该函数引用的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); 
} 

所有这一切工作正常,是所有浏览器,但由于某种原因,PHP文件不会在Firefox中调用。 有没有人有任何建议的想法?

+2

您可以随时使用经常更新的美观的.browser功能,并在用户使用Firefox时发布大量消息“请使用Internet Explorer,本网站非常棒! ?? – adeneo

+0

@adeneo,它本身使网站不是很好... – MarioDS

+0

你使用萤火虫吗?你看到了什么错误信息? – Landon

回答

0

扩展@ epascarello的答案,你可能想要使用回调函数,这将执行您的帖子完成后的代码。阅读关于它here

function clearDatabaseOfAnySavedForm(){ 
    $.post('assets/scripts/reset-form.php', function(){ 
    //this will execute when the post returns 
    window.location.reload(); 
    }) 
} 

而且你不需要scrollTop的并返回false;

如果你不知道什么是回调函数,请阅读here。我记得当我第一次使用javascript时,这是一个非常不寻常的概念。

+0

你救了我的一天芽!我实际上并没有意识到,在请求发送之前我正在重新加载。 – user1792935

+0

积分@epascarello以及 – user1792935

+0

是的,信贷给他指出的问题,我+1他的答案,对不起,偷猎:) – Landon

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? 
} 

确保服务器上的代码运行的唯一方法是确保回调发生,而不是重新加载页面。发布请求是异步的。不保证浏览器会执行它。大多数浏览器在页面退出时会采取任何打开的连接并杀死它们。这就是Firefox不执行它的原因。

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

但是为什么还要打一个Ajax调用,向页面提交一个post请求。该页面将重新加载并重定向到您来自的地方。 Ajax不是正确的解决方案。

+0

感谢您的评论@epascarello。 我基本上不在乎从服务器返回的内容,因为我正在对数据库执行删除操作。我所关心的只是删除操作发生,但这本身并没有发生。 如果ajax不是正确的解决方案,您认为我的问题的正确解决方案是什么? 干杯 – user1792935

+0

没有足够的时间发送请求,因为您马上重定向? – adeneo

+0

@ user1792935如果您关心从服务器返回的内容,则无关紧要,客户端不会提供足够时间外出的请求。 – epascarello

相关问题