【问题标题】:sending JSON as AJAX reponse. json_encode just not working?将 JSON 作为 AJAX 响应发送。 json编码不起作用?
【发布时间】: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

标签: php ajax json


【解决方案1】:

确保您使用的是 php 5.2+,因为 json_encode() 在以前的版本中不存在

【讨论】:

  • 啊...我以为是5.1?会解释...我现在去检查/升级!
  • 就是这样!我正在运行 5.1.6。升级。现在好了!感谢您的帮助,每个人都参与了 :)
【解决方案2】:

我看不到你的分隔符? , 和 ;和{}?

【讨论】:

  • 我想知道我必须在 json_encode 中使用分隔符,甚至在 javascript 中使用 json.parse... 你能举个例子说明你的意思吗?
  • 你相对选择了第五列-但不要使用分隔符将其换行-我怎么会因为这个答案而受到惩罚?
  • 投票给你的不是我。然而,这不是问题的解决方案。我检查了有效的旧代码,并且在调用变量时不需要使用分隔符。无论如何都没有指定。
  • 我认为它应该是这样的: [item1, item2, item3] - ifg 一个数组,你应该使用 [] 和 , 来分隔每个值?
  • JSON 编码为您完成这一切。我认为您误解了帖子的重点...... JSON 编码不起作用。不是php数组的构造。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2018-03-27
  • 2021-11-12
  • 2022-11-13
相关资源
最近更新 更多