我创建了我的第一个AJAX-JSON项目而没有发布任何(愚蠢)问题,除了这个小问题:
function processEvent(data) {
var evt = $(data).text();
}
当我写警报(evt);我看到以下内容:
{meat:'beef',vegetable:'carrots',potato:'mashed'}
我可以使用以下代码从变量'evt'中提取'beef'这个词:
evt.substr(7,4)
但如果我写:
evt.meat
我收到错误:未定义。如何在不诉诸字符串操作的情况下直接检索变量'meat'的值?
答案 0 :(得分:1)
这是因为此时您特意将evt
作为字符串。取决于data
表示的内容(JSON字符串数据或已从JSON解析的对象,或DOM节点 - 我无法分辨哪些代码示例中没有更多上下文),您可能需要执行某些操作获得一个对象表示。您至少可以将字符串解析为JSON:
var evt = JSON.parse($(data).text());
我的猜测是你可能已经有了一个对象表示,你通过调用text()
将它变成一个字符串,所以这里可能会有一些不必要的序列化/反序列化。
答案 1 :(得分:1)
您需要使用JSON.parse()
将JSON字符串转换为相应的数据。
var evt = JSON.parse($(data).text());
console.log(evt.meat);
jQuery可以自动为您执行此操作。之一:
$.getJSON()
以执行AJAX通话。dataType: 'json'
。答案 2 :(得分: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
}
答案 3 :(得分:0)
var obj = JSON.parse(data);
var val = obj['meat'];