Javascript 两个PHP数组未返回,两个为

Javascript 两个PHP数组未返回,两个为,javascript,php,arrays,ajax,Javascript,Php,Arrays,Ajax,下面是代码: function pullLists(){ require ($_SERVER['DOCUMENT_ROOT'] . '/sql_connection/connect.php'); $sql_sn = "SELECT sName FROM skills"; $sql_st = "SELECT sType FROM skills"; $sql_class = "SELECT class_name FROM class_info"; $sql_race = "SEL

下面是代码:

function pullLists(){
  require ($_SERVER['DOCUMENT_ROOT'] . '/sql_connection/connect.php');
  $sql_sn = "SELECT sName FROM skills";
  $sql_st = "SELECT sType FROM skills";
  $sql_class = "SELECT class_name FROM class_info";
  $sql_race = "SELECT race_name FROM races";

  $r_sn = $link->query($sql_sn);
  $r_st = $link->query($sql_st);
  $classes = $link->query($sql_class);
  $races = $link->query($sql_race);

  $skillnames = array();
  $skilltypes = array();
  $classnames = array();
  $racenames = array();

  if ($r_sn->num_rows > 0){
    while ($row = $r_sn->fetch_assoc()){
      $skillnames[] = $row["sName"]; 
    } 
    echo $skillnames[1];
  } else {echo "No rows found for Skill Names.";}
  if ($r_st->num_rows > 0){
    while ($row = $r_st->fetch_assoc()){
      $skilltypes[] = $row["sType"];
    }
  } else {echo "No rows found for Skill Types.";}
  if ($classes->num_rows > 0){
    while ($row = $classes->fetch_assoc()){
      $classnames[] = $row["class_name"];
    }
  } else {echo "No rows found for Class Names.";}
  if ($races->num_rows > 0){
    while ($row = $races->fetch_assoc()){
      $racenames[] = $row["race_name"];
    }
  } else {echo "No rows found for Race Names.";}
  $resultArray = array($skillnames, $classnames, $racenames);
  echo json_encode($resultArray);
}
如果我按原样运行它,我会在Chrome控制台中看到一个错误,上面写着“未捕获的语法错误:输入意外结束”,并指向调用此函数的.js文件(通过AJAX和其他方式)。但是,如果我从
$resultaray
中删除
$skillnames
,它会很好地返回其他两个数组,并且.js脚本工作得很好。我很困惑。在调试时,我添加了
echo$skillnames[1]行只是为了看看会发生什么,果然在我的Chrome控制台中我看到了
$skillnames
数组的第二个值。据我所知,它正确地提取了值,但当它真正返回到
echo
'ing
$resultArray
时,它就被搞乱了。我错过了什么

当我将
$skilltypes
抛出到
$resultArray
中时,同样的“意外输入结束”错误也会发生。这已经运行了一段时间,但我最终在SQL数据库中重建了skills表。这是我记得的最新变化,可能导致这种情况,但我不明白为什么会这样。我确信它就是这个PHP文件,但是如果你们都想看到调用它的AJAX,请告诉我

.js用于咯咯笑:

//Pull Skill, Class, & Race Lists
window.onload = function() {
  xhr = new XMLHttpRequest();
  userVar = "func=pullLists";
  xhr.open("POST", "pullSQLData.php", true);
  xhr.onreadystatechange = function(){
    if (xhr.status == 200 && xhr.readyState == 4){
      responseArray = xhr.responseText;  
      targetDiv = document.getElementById('skillList');

      console.log(responseArray);

      targetInfo = JSON.parse(responseArray);
      // ... do stuff... 
      }
    }
  xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  xhr.send(userVar);
}

JSON.parse(responseArray)是它所能达到的<代码>控制台日志(responseArray)$skillnames
$skilltypes
是PHP结果的一部分,则code>将不返回任何内容(甚至不返回一对空方括号),或者如果从结果中取出上述数组,则code>将返回正确的数组

找到了。在重建“技能”表时,我在一些名称中使用了括号。在遍历数组列表之后,我看到Chrome控制台在点击这些名称时抛出了一些奇怪的符号


果然,重命名这些值并删除SQL表中的括号就解决了这个问题。

前端的JavaScript如何处理多个返回值?i、 e.您正在回显错误消息“未找到行…”以及数组。除非你有一些非常聪明的JS代码来解析错误消息和数据数组,否则你不可能做到这一点。注释掉那些其他的
echo()
s,看看会发生什么。那些“找不到行…”现在没有得到回应。看起来PHP正在提取行,因此不会触发这些错误。这些回声不会成为制作的一部分。把他们放进去,想办法解决这个问题。若它们被触发,它们应该抛出一个不同的错误,但会清楚地说“并没有找到用于blah的行”和数组混在一起。说得通?说得通。我能看看你的JS代码只是为了好玩吗?当然。我已经把它添加到了主帖子中,你不能同时输出字符串和JSON,或者将字符串格式化为JSON并与其他JSON输出一起输出。