没有返回两个PHP数组,两个是

时间:2015-08-28 01:26:16

标签: 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 = "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控制台中收到错误消息" 未捕获的SyntaxError:意外的输入结束"并指向我的.js文件中调用此函数(通过AJAX和所有这些)。但是,如果我从$skillnames删除$resultArray,它会返回其他两个数组,并且.js脚本运行良好。我感到很困惑。在我进行调试时,我添加了echo $skillnames[1];行只是为了看看会发生什么,而且在Chrome控制台中我确实看到了$skillnames数组的第二个值。因此,据我所知,它正确地提取了值,但是当它实际上echo $resultArray时,它就会被提升。我错过了什么?

相同"意外的输入结束"当我将$skilltypes投入$resultArray时,错误最终会发生。这个 工作了一段时间,但我最终重建了我的SQL数据库中的技能表。这是我记得的最新变化,可能会导致这种变化,但我不知道为什么会这样。我确信它是这个PHP文件,但是如果所有人都希望看到调用它的AJAX,请告诉我。

.js giggles:

//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);就是它。如果console.log(responseArray);$skillnames是PHP结果的一部分,$skilltypes将根本不返回任何内容(甚至不是一对空方括号),如果是"%b %d, %Y %I:%M %p"将返回正确的数组从结果中取出上述阵列。

1 个答案:

答案 0 :(得分:0)

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

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