JavaScript没有返回数据但没有错误

时间:2017-02-23 02:10:12

标签: javascript php xmlhttprequest

我正在调用查询数据库并返回结果的php文件。我已经验证php文件会根据需要准确地返回数据,但我的调用页面不会从JavaScript更新。

我需要在下面的语法中更改以便在页面上返回返回的值?

<script type="text/javascript">
function boostion()
{
var xhr;
 if (window.XMLHttpRequest) { 
    xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { 
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
     xhr.open("GET", "QueryDB.php", true); 
     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                  
     xhr.onreadystatechange = display_data;
    function display_data() {
     if (xhr.readyState == 4) {
      if (xhr.status == 200) {     
      document.getElementById("data").innerHTML = xhr.responseText;
      } else {
        alert('There was a problem with the request.');
      }
     }
    }
}
</script>

修改
我还在Chrome中打开了开发者选项并检查了控制台,没有显示错误或问题,一切都很成功!

编辑2
我尝试使用下面的JQuery方法并使用了这种语法 - 但是我得到了错误

  

未捕获的TypeError:$(...)。load不是函数

语法:

<script src="https://code.jquery.com/jquery-3.1.1.slim.js" 
    integrity="sha256-5i/mQ300M779N2OVDrl16lbohwXNUdzL/R2aVUXyXWA=" 
    crossorigin="anonymous" type="text/javascript"></script>
<script type="text/javascript">
$(window).load(function(){
 $.get("QueryDB.php", function(data, status){
document.getElementById("data").innerHTML = data;
});
});
</script>

编辑3
这是我的php语法,它运行我希望从javascript返回的sql语法和echo结果

<?php
    $option = array(); 

    $option['driver']   = 'mssql';
    $option['host']     = 'host';
    $option['user']     = 'user';       
    $option['password'] = 'password';   
    $option['database'] = 'database';     
    $option['prefix']   = '';            

    $db = JDatabase::getInstance( $option );
    $result = $db->getQuery(true);
    $result->select($db->quoteName(array('trackandfieldresults')));
    $result->from($db->quoteName('[TrackData]')); 
    $db->setQuery($result); 
    $row = $db->loadRowList();
    echo $row['0']
?>

4 个答案:

答案 0 :(得分:0)

使用xhr.send(); 如果是GET请求,您必须在xhr.open中应用查询字符串,而不必设置Content-type:application/x-www-form-urlencoded

答案 1 :(得分:0)

我使用JQuery的方法更快。

$(window).load(function(){
   $.get("QueryDB.php", function(data, status){
    //Do whatever you want here
    });
});

这应该做的工作。你的方法陈旧,调试很复杂

答案 2 :(得分:0)

首先,脚本应该在结束体标记之前的HTML内部。然后你打开另一个文件并在其中编写代码。 JQUERY没有脚本标记。您正在为脚本创建外部JavaScript文件。无需脚本标记。现在使用这种格式。

$(window).on('load', function(e){
e.preventDefault();
var dat = //the content you are trying to load
$.get('middleware.php', dat, function(data){
$('#selector').html(data)
});

})

答案 3 :(得分:0)

试试这个

&#13;
&#13;
function boostion(){
  var xhr;
  if (window.XMLHttpRequest) { 
    xhr = new XMLHttpRequest();
  } 
  else if (window.ActiveXObject) { 
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xhr.open("GET", "QueryDB.php", true);   
  xhr.send();
  xhr.onreadystatechange = function(){
    console.log(xhr);
    if (xhr.readyState == 4 && xhr.status==200) {
       document.getElementById("data").innerHTML = xhr.responseText;
    }
  }
  
}
&#13;
<div id="data"></div>
<button onclick="boostion();">Load</button>
&#13;
&#13;
&#13;