2016-12-25 93 views
0

有時函數reload();不會更新div的內容。我點擊一個按鈕時調用這個函數。有時只有一個div不會更新。隨機div,隨機點擊。有時第一次點擊不起作用。 div內容不會顯示任何錯誤,只是以前未更新的數字。當我再次點擊按鈕時,它會更新並顯示正確的一個。爲什麼AJAX返回錯誤的結果?

錯誤的實施例(由一個每次增加#number_input我點擊): DIV內容示出了:1,2,2,4 問題是與那些2S,缺少。在數據庫中,數字是正確的。

我正在運行本地服務器(XAMPP)火狐,ChromeIE同樣的問題。

沒有錯誤螢火蟲控制檯。請求正確完成,但返回值有時錯誤。通常只有一個數組項是錯誤的,從數據庫返回的。

完全相同的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毫秒內完成。

+1

你是否在沒有延遲的情況下在同一個觸發器上執行ajax請求?因爲可能會發生什麼,因爲你正在使用單獨的ajax調用,因爲你的數據庫在你從第二個Ajax獲得結果之前還沒有真正完成更新。所以第二個Ajax可能會在第一個實際完成php腳本之前回來。 – NoobishPro

+0

這是我想到的第一件事。延遲有時只有幾秒鐘。沒有辦法數據庫不會在幾秒鐘內更新。再加上請求是在本地進行的,所以沒有dealy(大約10-38 ms,直到返回值)。我不認爲這是問題。 – user1947700

+1

幫你一個忙,還在測試它。做第二個按鈕只是爲了重新加載。如果問題仍然存在,那麼你可以肯定... – Jeff

回答

0

問題出在你的按鈕js以及jQuery源代碼中。試着用innerHTML(for plain js)html(JQuery)更換的textContent更換之後,它會

document.getElementById("x4").innerHTML = xres[3];或者你使用jQuery你可以有$("#x4").html(xres[3])

+0

jQuery源代碼?我記得我已經嘗試了innerHTML。問題不在於js按鈕,因爲總是發出請求。問題不在於textconent,因爲我總是從服務器獲得響應,但數據是錯誤的。此外,即使內容是錯誤的,它的內容也會隨時更新。 – user1947700

相關問題