【问题标题】:Trying to pass php array to Javascript [duplicate]试图将php数组传递给Javascript [重复]
【发布时间】:2013-11-21 22:48:07
【问题描述】:

我已经疯狂地在网上搜索了一天,试图找出为什么我的 javascript 代码不起作用。我正在尝试使用 JSON 将数组从 PHP 传递到 Javascript。之后我想在其他函数中使用它,从而使数组或变量成为全局变量。但我一直无法让它工作,这是我到目前为止的代码:

data = [];
$(document).ready(function() {
  $.getJSON('database.php', function(phpdata){
    // vad du vill göra här, allt retuneras i data-variabeln
    console.log(phpdata);
    data[0] = phpdata[0];
    console.log(data[0]);
  });

console.log(data);

有什么想法吗?

【问题讨论】:

  • console.log(phpdata); 的输出是什么?
  • database.php 是否在回显 json 对象?如果是这样,database.php 上的标题是否正确?
  • 它是异步的
  • 请将代码发到database.php,以便我们为您提供帮助。

标签: javascript php arrays database json


【解决方案1】:

$.getJSON被调用时,JS引擎会并行执行下一条指令,这里是console.log(data);。此行为是由 $.getJson 的异步引起的。

由于下一步是在下一毫秒计算并执行的,因此网页并未完全请求,数据仍处于其初始化值 ([])。

你可以做什么:

将所有必须对您的数据做某事的指令放在另一个函数中,并在匿名函数function(phpdata) { ... } 上调用它。

像这样:

function dataLoaded(data) {
   // show data in dom elements
   // work with data, e.g. check for data["error"] = true or show the username from data["username"]
}

data = [];
$(document).ready(function() {
  // Load JSON from server, wait for it and then work with it in dataLoaded(..)
  $.getJSON('database.php', function(phpdata){
      dataLoaded(phpdata);
  });
}
// this is wrong:
// console.log(data);

database.php 要求返回 JSON 数据类型的 JSON 数组。请参阅 php 手册上的 json_encodeheader("CONTENT-TYPE: application/json")

感谢评论说:区分大小写和数据类型失败。

【讨论】:

  • 应该是header('Content-Type: application/json')(注意PHP指令是区分大小写的)。
  • 我明白这一点 :-) 没有谈论对象,只是谈论“JSON 数组”,在技术和定义上也不正确。
  • 我试过了,但我似乎还是不行=/。
  • 像这样?: $(document).ready(function() { var arr = []; function pass(arr) { var arr = []; $.ajax({ url : '数据库.php', dataType : "json", 成功: function(json) { console.log(json); arr = json; console.log(arr); return arr; } } ); }; console.log(arr) ;
【解决方案2】:

database.php 是做什么的?它可能应该输出一个 JSON 编码的字符串。

http://us3.php.net/json_encode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2012-05-27
    • 2013-03-15
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多