【问题标题】:Javascript object return as JSONJavascript 对象以 JSON 形式返回
【发布时间】:2016-02-03 00:32:48
【问题描述】:

我正在处理这个脚本,其中 $.ajax 调用成功后必须调用一个函数,该函数应该以[object object] 格式返回一个 Javascript 对象作为 JSON,以便我可以在成功正文中访问它。我能够返回格式良好的字符串,但我无法访问对象的属性。这是[object object]的实际正文:

{"id":"12","created_at":"2015-10-30T21:30:44.457Z", 
"card":{"id":"67","number":"89990","expires":"2018"},
"verification":"required"}

它就像 JavaScript 对象中的一个对象。第一个对象称为雇员,嵌套对象称为卡片。我不明白我在做什么错。我试图用文字定义对象:

function get_employee()
{
var employee = [];
var employee_data = '[{"id":"12","created_at":"2015-10-30T21:30:44.457Z", 
"card":[{"id":"67","number":"89990","expires":"2018"}],
"verification":"required"}]';
employee = JSON.parse(JSON.stringify(employee_data));
return employee;
}

这就是我想在 $.ajax 调用中访问它的方式:

$.ajax {
type: "POST",
url: 'my_url/process',
//etc etc
success: function(data){
//calling my get_employee function now
params = get_employee();
//this is how I want to use the returned object as JSON
frm = $("<form action='/save/employee/database' method='POST'></form>");
frm.append("<input type='hidden' name='employee_id' value='" + params.employee.id + "'>");
frm.append("<input type='hidden' name='card_id' value='" + params.card.id+ "'>");
frm.append("<input type='hidden' name='request_id' value='" + data + "'>");
frm.submit();
}
}

但是当我 console.log(params.token.id) 我得到一个错误,说 params.token.id 是未定义的,表单中也有同样的错误。我的问题是:我该怎么做?我错过了什么?

注意: 当我使用 console.log(params) 时,它会打印我在函数中定义的纯字符串,但它不会返回 [object object]。当我在 firebug 中调试时,它还会将返回的响应显示为 html 字符串而不是 JSON。我的问题是我想将它作为 JSON 接收,并将其属性作为普通的 javascript 对象访问。

提前感谢您的帮助!

【问题讨论】:

    标签: javascript json ajax javascript-objects


    【解决方案1】:

    通常,您会从 ajax 调用中获取 JSON 数据,如下所示:

    $.ajax( {
        type: "POST",
        url: 'my_url/process',
        dataType: 'json',                // !
        success: function(data) {        // Now, data will be an Object
            ...
        }
    } )
    

    而您在my_url/process 的服务器只返回 JSON 字符串。

    但是,如果你想用你的get_employee返回一个对象,就不需要使用JSON.parse:只需使用JavaScript Object Notation来声明对象即可:

    function get_employee()
    {
        return {
           employee: {
               id: 12,
               created_at: "2015-10-30T21:30:44.457Z",
               card: { id:"67", number":"89990", expires:"2018" },
               verification:"required"
           }
        };
    }
    

    此外,除了修复各种语法错误外,请确保您正确访问卡:

    frm.append("<input type='hidden' name='card_id' value='" + params.employee.card.id+ "'>");
    

    【讨论】:

      【解决方案2】:

      您的employee_data 已经是一个 JSON 字符串,不需要再次 .stringify() 它,否则它将再次转义字符串,结果.parse() 方法将返回原始 JSON 字符串而不是您的对象想要。

      【讨论】:

      • 嗨@Kenney,感谢您对此的解释。我走你的路,并试图测试它。但是,它在 created_at: time_stamp 字段的对象文字内给了我一个语法错误。请注意time_stamp 是一个包含当前时间和日期的变量。我确信它允许将变量作为键的值传递。这里有什么问题?
      • 嗨@Griffith 谢谢。你是对的,它已经是一个 JSON。现在,如果我不 json.prase 它,当我将变量用作对象文字中键的值时会出现错误。这样:employee: { id: id, created_at: time_stamp }我做错了吗?
      • 非常感谢你们两位。这确实有效:)
      猜你喜欢
      • 2018-01-11
      • 2020-09-27
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 2012-01-03
      • 1970-01-01
      相关资源
      最近更新 更多