【问题标题】:Passing JSON from PHP to a JavaScript variable将 JSON 从 PHP 传递到 JavaScript 变量
【发布时间】:2013-06-27 01:43:11
【问题描述】:

我正在使用 phonegap 进行应用,但我一直在尝试将 JSON 数据从服务器上的 PHP 发送到设备上的 JavaScript。我想做类似的事情:

var JSON = '{ "Table" : ' + "http://www.hel.net/LoadDB.php=?table=exhibitions" +  '}';

php 工作正常并返回类似:

"[{"id":"1","name":"Art for everyone","image":null,"name2":"June 29, 2013: 11:00am.","description":"With reservation\r\nFree entrance","description2":null}]"

我希望这个结果产生一个 javascript 变量,以便以后使用:

var obj = eval ("(" + JSON + ")");
document.getElementById("rName").innerHTML=obj.Table[1].name;
document.getElementById("lname").innerHTML=obj.Table[1].name2; 

我想做的是这样的:

var JSON = '{ "Table" : ' + "http://www.hel.net/LoadDB.php=?table=exhibitions" +  '}';
var obj = eval ("(" + JSON + ")");
document.getElementById("rName").innerHTML=obj.Table[1].name;
document.getElementById("lname").innerHTML=obj.Table[1].name2; 

我怎样才能使第一行工作?是否有可能使第一线工作? PS。我对 JSON 数组没有太多经验。



好的,我尝试了 ajax 并且工作正常,我使用了:

console.log("before"); 

var jqxhr = $.ajax( "http://www.hel.com/LoadDB.php?table=exhibitions" )
            .done(function(data) { console.log(data); })
            .fail(function() { console.log("error"); })
            .always(function() { console.log("complete"); });

console.log("after");

更多信息在:

api.jquery.com

【问题讨论】:

  • 使用 JSON.stringify()JSON.parse() 创建和读取 JSON,不要尝试手动操作。
  • 在 PHP 方面,您是否查看了 json_encode() 以将 JSON 返回给调用者。
  • 刚刚意识到这是重复的:json-object-value-from-php
  • 看起来像我的问题。我的问题不是评估 JSON 是从 PHP 获得响应,稍后我将评估它。我已经使用了 .get 和 .getJSON,但没有用。有些东西不见了。

标签: php javascript jquery json cordova


【解决方案1】:

我想你只需要var obj = <?php echo $myjsonencodedvar; ?>

var obj = <?php echo json_encode($myarray_or_object); ?>

既然我说“我认为...”,我决定测试一下。我在 SO 上找到了以下 dump() 函数。

$arr=array(1,'biscuit'=>'gravy',3,4,5);
$json=json_encode($arr);
?>
<script>
  j=<?php echo $json; ?>;
 document.write(dump(j));

 function dump(obj) {
    var out = '';
    for (var i in obj) {
        out += i + ": " + obj[i] + "\n";
    }

    return out;
}
</script>

输出:

0: 1 biscuit: gravy 1: 3 2: 4 3: 5

【讨论】:

    【解决方案2】:

    试试这个:

    PHP: (json.php)

    <?php
        header("Content-Type: text/json");
    
        //the data format your question mentioned
        $data = array("Table"=>array(array("id"=>"1","name"=>"Art for everyone","image"=>null,"name2"=>"June 29, 2013","description"=>"With reservation\r\nFree entrance","description2"=>null)));
    
        echo json_encode($data);
    ?>
    

    前端:

    <!DOCTYPE html>
    <html>
    <head>
     <title></title>
    </head>
    <body>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <script>
        $.get("json.php",function(json){
            alert(json.Table[0].name);
        });
    </script>
    </body>
    </html> 
    

    希望这对你有帮助。

    【讨论】:

    • 在 dbSelect.js 中,我正在编码:console.log("before"); $.get("http://www.hel.net/LoadDB.php=?table=exhibitions", function(json){ console.log(json.table[0].name); console.log("in code"); } );&lt;br/&gt; console.log("after"); 在日志中,我收到“之前”和“之后”,但从未收到“代码中”。我认为问题出在其他地方。
    【解决方案3】:

    使用 JSONP(无回调),在客户端使用 $.getJSON() 它会将其从 json 字符串解析为 js 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2010-11-02
      • 2016-11-09
      • 1970-01-01
      相关资源
      最近更新 更多