【问题标题】:overriding default property in an object覆盖对象中的默认属性
【发布时间】:2009-12-10 04:23:21
【问题描述】:

我想对 php 文件进行 ajax 调用,该文件在 json 中返回用户信息,然后获取该数据并将其放入对象属性中

示例:

System = {
 prop1= ''
}

我只想覆盖 prop1 属性

我使用 jquery 进行 ajax 调用

【问题讨论】:

  • 你的 JSON 长什么样,你想达到什么结果?

标签: javascript jquery json object


【解决方案1】:

在 PHP 中设置 JSON 输出的最简单方法是简单地使用 stdClass() 对象并在其上调用 json_encode()

$obj = new stdClass();
$obj->name = 'user name';
$obj->prop1 = 'property 1';

echo json_encode($obj);

从 Ajax 调用收到此消息后,您将拥有一个带有 nameprop1 属性的 javascript 对象。

如果您想用从 Ajax 调用中获取的属性替换现有对象的属性,则必须手动完成,即。检查所需属性的 JSON 结果,并将其设置在现有对象上。解决方法是仅在 JSON 中输出您想要的属性,并通过迭代获取的 ajax 对象来使用它们。示例:

for(prop in fetchedAjaxObject) {
    existingObject.prop = x.prop;
}

编辑

对于您下面的评论,听起来您只是想从 JQuery 调用的结果中获取 JSON 对象?

在这种情况下,您只需为 ajax 调用的“成功”属性设置一个处理函数。结果自动传递给处理函数。 JQuery docs 中有示例,但这里是一个基本的示例:

$.ajax({
    url: 'www.example.com',
    success: function(data) {
        //data is your JSON object
        yourObject.prop = data.prop1;
    }
});

【讨论】:

  • 对不起,我应该说我已经拥有 php 文件中的数据,我只是想弄清楚如何从 jquery 的回调中获取它。
  • 别忘了dataType:"json",或者更好,只需使用getJSON
  • 这是我当前代码的样子,但它不起作用它使属性 fname 成为局部变量,仅用于回调 System.User = { fname: 'null', avatar : typeof(avatar) != '未定义' ? this.avatar : 'user.ico', setInfo: function(name){ name = typeof(name) != 'undefined' ?名称:System.User.username; $.post('lib/system.userinfo.php', {name: name}, function(data){ System.User.fname = data.fname; },'json'); } }