将AJAX PHP对象转换为字符串和回显结果

时间:2011-11-06 18:01:57

标签: php javascript jquery ajax json

我有以下php对象(??? new to this)。它通过AJAX从我的页面发送,并作为JSON发送。我正在解码它并尝试回显结果,但我得到的只是NULL。在Firebug中,POST寡妇的所有内容都显示正常,但在RESPONSE中没有任何内容(我认为这是我应该看的地方?)

header('Content-type: application/json');
$res = json_decode($_POST['apiresponse'], true);
echo $res;
  • JSON对象传递给上面的PHP文件(在传递之前也是字符串化)
  • JSON已解码并保存为$ res variable
  • Firebug POST窗口中显示的一切正常

如何将其转换为PHP变量(字符串),我可以返回到我原来的PHP页面,

如何发送/调用变量?**

谢谢!

2 个答案:

答案 0 :(得分:1)

情况并非如此:(跳过!) 你如何将变量从javascript传递给php? 我真的只是在这里猜测,但听起来很像你有什么东西沿着

$.ajax( "/my-api-thing.php", { data: { "apiresponse": "some_value", "more":"things" } }).success(...);

如果是这种情况,那么你只是期望json作为php脚本的结果,但你实际上并没有发送一个json对象作为请求,而是正常的http参数。

然后你会在php中写这样的东西:

$someVariable = $_POST["apiresponse"]

(顺便说一句:这将是“正常”的方式,将json发送到服务器并不是那么常见)


更新了猜测

我已经验证了您使用此文件发布的json:

<form type="textarea" method="post">
<textarea name="apiresult" style="width: 400px;height:200px;">
    {"id":"-------","name":"Aaron ----------","first_name":"Aaron","last_name":"----","link":"http://www.facebook.com/-------","username":"-----","birthday":"05/06/1949","location":{"id":"-----","name":"Los Angeles, California"},"gender":"male","email":"------","timezone":-8,"locale":"en_US","verified":true,"updated_time":"2011-10-22T18:40:02+0000"}
</textarea>
<br>
<input type="submit">
</form>

<br>


<?php

if( isset( $_POST["apiresult"] ) ){
    echo "<pre>"; 
    echo $apiresult; 
    echo "\n----\n"; 
    print_r( json_decode( $_POST["apiresult"] ) ); 
    echo "</pre>"; 
}

?>

所以json_decode似乎根本不是问题。

其他一些猜测:

  1. 你有一个非常旧版本的php启用了魔法引号(运行phpinfo来检查!)
  2. 你正在使用一个php框架对post变量进行一些预处理
  3. 要查明问题,您可以在echo $_POST["apiresponse"];之前运行json_decode以查看输出是否与输出不同?

答案 1 :(得分:0)

来自PHP文档:

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

"NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit."

检查“$ _POST ['apiresponse']”的深度。