0

我创建了我的第一个 AJAX-JSON 项目,没有发布任何(愚蠢的)问题,除了这个小问题:

function processEvent(data)  {  
var evt = $(data).text();
   } 

当我写警报(evt)时;我看到以下内容:

{meat:'beef',vegetable:'carrots',potato:'mashed'}

我可以使用以下代码从变量“evt”中提取“牛肉”一词:

  evt.substr(7,4)

但如果我写:

  evt.meat

我收到一个错误:未定义。如何在不诉诸字符串操作的情况下直接检索变量“肉”的值?

4

4 回答 4

1

这是因为此时您专门制作evt了一个字符串。根据data表示的内容(JSON 字符串数据或已从 JSON 解析的对象,或 DOM 节点 - 如果您的代码示例中没有更多上下文,我无法判断哪个),您可能需要做一些事情来获取对象表示. 至少您可以这样做以将字符串解析为 JSON:

var evt = JSON.parse($(data).text());

然而,我的猜测是你可能已经有一个对象表示,你通过调用将它变成一个字符串text(),所以这里可能会发生一些不必要的序列化/反序列化。

于 2012-12-24T23:26:38.543 回答
1

您需要使用JSON.parse()从 JSON 字符串转换为相应的数据。

var evt = JSON.parse($(data).text());
console.log(evt.meat);

jQuery 可以自动为您完成这项工作。任何一个:

  1. 调用$.getJSON()以执行 AJAX 调用。
  2. dataType: 'json'在 AJAX 调用的选项参数中指定。
  3. 服务器发送标头“内容类型:应用程序/json”
于 2012-12-24T23:26:57.720 回答
1

如果您的evt数据是 JSON,您可以解析它并获取肉类属性。目前不是,这{meat:'beef',vegetable:'carrots',potato:'mashed'}就像 JSON 一样{"meat":"beef","vegetable":"carrots","potato":"mashed"}。请注意,使用的是双引号而不是单引号,并且还引用了属性。

function processEvent(data)  {  
var evt = $(data).text();// === {"meat":"beef","vegetable":"carrots","potato":"mashed"}
    evtObj = $.parseJSON(evt);
    alert(evtObj.meat); //shows beef
} 
于 2012-12-25T00:12:15.380 回答
0
var obj = JSON.parse(data);
var val = obj['meat'];
于 2012-12-24T23:26:45.497 回答