2011-04-26 33 views
2

我有一個連接到PayPal api的腳本來檢查有效的信用卡輸入。該腳本可能需要大約5秒鐘才能執行,並且爲了防止用戶多次單擊「提交」,如果他們沒有看到立即響應,我想要發出「請稍候」指示符。jQuery「請稍等」執行php時

我有一個div,「pleaseWait」是隱藏的。在jQuery的我:

$('#submit').click(function(){ 
    $('#pleaseWait').show(); 
}); 

唯一的問題是,如果存在問題,將PHP的錯誤發回,並「請稍候」將繼續在屏幕上。我決定嘗試另一種方法,並在腳本開始運行後在PHP中回顯jQuery,並在出現錯誤時將其隱藏起來。

/* Echo the jQuery so the "Please wait" indicator will show on screen */ 
echo "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js\"></script>"; 
echo "<script type='text/javascript' charset='utf-8'>"; 
echo "\$(document).ready(function(){"; 
echo "\$('#pleaseWait').show();"; 
echo "});"; 
echo "</script>"; 


if($error == ""){ 

     /* There is not an error, run php. */ 

}else{ 
     /* There was an error, stop the jQuery from displaying the "please wait" and display the error */ 
     echo "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js\"></script>"; 
     echo "<script type='text/javascript' charset='utf-8'>"; 
     echo "\$(document).ready(function(){"; 
     echo "\$('#pleaseWait').hide();"; 
     echo "});"; 
     echo "</script>"; 
} 

這可以工作,但似乎很雜亂。有沒有更好的方式來做到這一點,而不是在PHP多個回聲?

+0

如果你想同步您的加載欄與貝寶進程檢查有關它的文檔。如果你想用戶點擊提交一次使用解除綁定當用戶點擊和綁定時,Ajax完成.. – 2011-04-26 02:02:10

回答

7

嘗試使用AJAX

$('#submit').click(function(){ 
    $('#pleaseWait').show(); 
    $.post('url',card,function(data){ 
     $('#pleaseWait').hide(); 
     alert(data); 
    }) 
}); 
+0

謝謝!我對ajax不是很熟悉,但會在適當的研究中盡我所能,謝謝你指出我正確的方向。 – Jason 2011-04-26 02:05:12

4

使用$.ajax(),並與JSON的PHP腳本的答覆,可以在單獨的success/error回調,或單complete回調讀取。

有一些jQuery插件,可以讓您輕鬆製作出簡單易用的表單。 Mike Alsup的jQuery Form Plugin是一個非常流行的。


或者,跳過Ajax調用完全,只是禁用時提交表單的提交按鈕:

$('#submit').click(function(){ 
    this.disabled = true; 
}); 
+0

與LanceHub非常相似。阿賈克斯是!謝謝你指出我正確的方向。 – Jason 2011-04-26 02:06:14

+0

如果它被禁用,如果出現問題,您將如何重新啓用它?根本問題是,如果提交,php可能會有錯誤,將它們發回到頁面。如果提交按鈕先前被禁用,它將保持禁用,除非頁面被刷新。 – Jason 2011-04-26 02:10:27

+0

這就是成功/錯誤/完整的回調。 – 2011-04-26 14:12:44

0

我不能說我完全理解你的問題,但我會盡力回答我的所能。如果多個回聲,是你的問題,請嘗試進出PHP的跳躍:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
<script type='text/javascript' charset='utf-8'> 
$(document).ready(function(){ 
$('#pleaseWait').show(); 
}); 
</script> 

<?php 
if($error == ""){ 
     /* There is not an error, run php. */ 
}else{ 
?> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
<script type='text/javascript' charset='utf-8'> 
$(document).ready(function(){ 
$('#pleaseWait').hide(); 
}); 
</script> 

<?php } ?> 

可是也許你的問題是,PHP是第一次運行時,頁面加載之前,和JavaScript是運行後(或)頁面負載。

0

這不完全是你最初要求的,但從經驗來看,防止用戶在長時間處理過程中點擊多次提交的最佳方式(如AJAX調用)僅僅是禁用提交按鈕

不要誤解我的意思,我仍然認爲你應該在「請稍等」的信息或其他東西。我所說的是,讓你的信息專注於成爲一個信息,讓你的按鈕專注於不讓自己點擊。

這很簡單,它不必在檢查時保持很多複雜性,而且工作。

+0

刪除它仍會遇到同樣的基本問題。如果在php中出現錯誤,如何在刪除它後將其恢復。您需要取消它才能解決問題並重試。 – Jason 2011-04-26 02:09:31