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输出一起输出。