【发布时间】:2011-10-04 09:37:38
【问题描述】:
我之前做过一些工作,将数组编码为 json 对象并发送它们,但是我无法让 json-encode 工作......
我用于发送 ajax 响应的脚本如下...
function loadCalls(sid)
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
innerText = xmlhttp.responseText;
aCall = document.createElement('div');
aCall.innerHTML = innerText;
document.getElementById("calls").appendChild(aCall);
}
}
xmlhttp.open("POST","loadCalls.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=<? echo $fname; ?>&lname=<? echo $lname; ?>&email=<? echo $email; ?>&sid=" + sid);
}
而我的 php 表单代码如下...它所做的只是构建一个数组尝试将其编码为 JSON,然后将其发送回我上面的 loadCalls 函数。
//让我们抓取超长变量...
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$sid = $_POST['sid'];
//Array for all the tokens to go into...
$ourCalls = array();
//Our counter
$i = 0;
//Build the query
$querytokens = "SELECT * FROM lime_tokens_".$sid." WHERE firstname='".$fname."' AND lastname ='".$lname."'";
//execute query
$resulttokens = mysql_query($querytokens) or die ("Error in query: $querytokens. ".mysql_error());
// see what rows were returned
while($rowtokens = mysql_fetch_row($resulttokens)) {
$ourCalls[$i] = $rowtokens[5];
$i++;
}
echo json_encode($ourCalls);
// free result set memory
mysql_free_result($resulttokens);
// close connection
mysql_close($connection);
如果我只是回显我们的 print_r $ourCalls,我会显示该文本,我的想法是,即使我按照我想要的方式将代码留在第一部分,它仍然会作为字符串显示在我的屏幕上.但我什么也得不到。
请帮忙:)
编辑
print_r 的输出是:
Array ( [0] => b8r5x6w53d6cahw [1] => p5ugbeg68b4qixy ) 1
Array ( [0] => 4c85zznh955gjsc [1] => 2atggeb2hyg9mbj ) 1
Array ( [0] => z4kihguxfu2npx9 ) 1
最后的1是什么意思?
编辑 - 放弃了回声,现在 1 消失了。
【问题讨论】:
-
print_r($ourCalls) 的输出是什么?你检查过你的php错误日志吗?您是否使用过类似 Firebug 或 Chrome 的控制台来检查服务器的准确响应?
-
print_r 完美地返回了 php 数组及其所有内容,我也可以将其视为 firebug 中的响应。但是,当我更改为 json_encode ... 我什么也得不到。完全没有反应。
-
错误日志中有什么内容吗?看起来你的数组存在问题,阻止它被编码为 json。请问你能发布
print_r($ourCalls)的精确输出吗? -
编辑以上响应以包含输出
-
我不知道
1是从哪里来的;是否有任何其他代码可能导致与print_r一起输出(例如,错字)?为什么会有多个数组?您是否在三个不同的数组上调用了print_r?