有時函數reload();不會更新div的內容。我點擊一個按鈕時調用這個函數。有時只有一個div不會更新。隨機div,隨機點擊。有時第一次點擊不起作用。 div內容不會顯示任何錯誤,只是以前未更新的數字。當我再次點擊按鈕時,它會更新並顯示正確的一個。爲什麼AJAX返回錯誤的結果?
錯誤的實施例(由一個每次增加#number_input我點擊): DIV內容示出了:1,2,2,4 問題是與那些2S,缺少。在數據庫中,數字是正確的。
我正在運行本地服務器(XAMPP)。 火狐,Chrome和IE同樣的問題。
沒有錯誤螢火蟲控制檯。請求正確完成,但返回值有時錯誤。通常只有一個數組項是錯誤的,從數據庫返回的。
完全相同的ajax代碼與不同的參數(完整)在不同的按鈕上工作正常。
PS:改變了我的變種名稱爲較短所以他們的眼睛友好
按鈕HTML:
<button id="xButton" class="btn btn-info">Text</button>
按鈕JS:
document.getElementById('xButton').onclick = function() {
var val = $('#number_input').val();
if (val > 0)
{
var xx = 1;
var yy = 1;
properties(xx, yy, val); //this updates the database by current val + val. Works correctly. Values always updated, no errors there. Clean and simple code. No way this is the source of problem.
number_input.value = 0;
xButton.textContent = ("bla bla"); //just resets the text
p1_reload();
}
}
的jQuery:
function reload() {
$.ajax({
type: 'POST',
url: 'example.php',
cache: false,
data: {reload: "action"},
dataType:"json",
success: function(data) {
var xres = new Array();
xres = data;
document.getElementById("x1").textContent = xres[0];
document.getElementById("x2").textContent = xres[1];
document.getElementById("x3").textContent = xres[2];
document.getElementById("x4").textContent = xres[3];
//these two functions has not connection with the updated divs. They don't update or even read them. So, there shouldn't be any problems.
xFunction();
yFunction();
}
});
}
PHP:
if(isset($_POST['reload'])) {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
try
{
require_once("session.php");
$auth_user = new xClass();
$user_id = $_SESSION['user_session'];
$stmt = $auth_user->runQuery("SELECT * FROM blabla WHERE user_id=:user_id LIMIT 1");
$stmt->execute(array(":user_id"=>$user_id));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
$xxx = $userRow['xxx'];
$yyy = $userRow['yyy'];
$zzz = $userRow['zzz'];
$qqq = ($xxx * $yyy) + ($zzz + $yyy + $xxx);
$xres = array();
$xres[0] = $xxx;
$xres[1] = $yyy;
$xres[2] = $zzz;
$xres[3] = $qqq;
$result = json_encode($xres);
echo $result;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}
數據庫返回簡單整數。沒有觸發器或小數。
jQuery版本:1.12.4分鐘。
單擊每隔幾秒(不頻繁點擊)。請求和響應在10-38毫秒內完成。
你是否在沒有延遲的情況下在同一個觸發器上執行ajax請求?因爲可能會發生什麼,因爲你正在使用單獨的ajax調用,因爲你的數據庫在你從第二個Ajax獲得結果之前還沒有真正完成更新。所以第二個Ajax可能會在第一個實際完成php腳本之前回來。 – NoobishPro
這是我想到的第一件事。延遲有時只有幾秒鐘。沒有辦法數據庫不會在幾秒鐘內更新。再加上請求是在本地進行的,所以沒有dealy(大約10-38 ms,直到返回值)。我不認爲這是問題。 – user1947700
幫你一個忙,還在測試它。做第二個按鈕只是爲了重新加載。如果問題仍然存在,那麼你可以肯定... – Jeff