2016-12-25 53 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