Ajax 如何从简单的对象文本中提取变量?

Ajax 如何从简单的对象文本中提取变量?,ajax,json,Ajax,Json,我创建了我的第一个AJAX-JSON项目,没有提出任何(愚蠢的)问题,除了这个小问题: function processEvent(data) { var evt = $(data).text(); } 当我写入警报(evt)时;我看到以下情况: {meat:'beef',vegetable:'carrots',potato:'mashed'} 我可以使用以下代码从变量“evt”中提取单词“beef”: evt.substr(7,4) 但如果我写: evt.meat

我创建了我的第一个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”的值?

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

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

然而,我的猜测是,您可能已经有了一个对象表示,您正在通过调用
text()
将其转换为字符串,因此这里可能会进行一些不必要的序列化/反序列化。

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

var evt = JSON.parse($(data).text());
var obj = JSON.parse(data);
var val = obj['meat'];

然而,我的猜测是,您可能已经有了一个对象表示,您正在通过调用
text()
将其转换为字符串,因此这里可能会进行一些不必要的序列化/反序列化。

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

var obj = JSON.parse(data);
var val = obj['meat'];
var evt = JSON.parse($(data).text());
console.log(evt.meat);
jQuery可以自动为您完成这项工作。要么:

  • 调用
    $.getJSON()
    执行AJAX调用
  • 在AJAX调用的options参数中指定
    dataType:'json'
  • 服务器发送标题“Content-type:application/json”

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

    var evt = JSON.parse($(data).text());
    console.log(evt.meat);
    
    jQuery可以自动为您完成这项工作。要么:

  • 调用
    $.getJSON()
    执行AJAX调用
  • 在AJAX调用的options参数中指定
    dataType:'json'
  • 服务器发送标题“Content-type:application/json”

  • 如果您的
    evt
    数据是JSON,您可以对其进行解析并获得meat属性。目前不是,这是
    {肉:'牛肉',蔬菜:'胡萝卜',土豆:'mashed'}
    ,因为JSON将是
    {“肉”:“牛肉”,“蔬菜”:“胡萝卜”,“土豆”:“mashed”}
    。请注意,使用了双引号而不是单引号,并且还引用了属性

    function processEvent(data)  {  
    var evt = $(data).text();// === {"meat":"beef","vegetable":"carrots","potato":"mashed"}
        evtObj = $.parseJSON(evt);
        alert(evtObj.meat); //shows beef
    } 
    

    如果您的
    evt
    数据是JSON,您可以对其进行解析并获得meat属性。目前不是,这是
    {肉:'牛肉',蔬菜:'胡萝卜',土豆:'mashed'}
    ,因为JSON将是
    {“肉”:“牛肉”,“蔬菜”:“胡萝卜”,“土豆”:“mashed”}
    。请注意,使用了双引号而不是单引号,并且还引用了属性

    function processEvent(data)  {  
    var evt = $(data).text();// === {"meat":"beef","vegetable":"carrots","potato":"mashed"}
        evtObj = $.parseJSON(evt);
        alert(evtObj.meat); //shows beef
    } 
    

    Mike,在上面的所有答案中,建议的JSON.parse函数抛出错误“无效字符”(MSIE脚本调试器)。所以你想知道上下文是什么是对的。我使用了ColdFusion查询,并将输出服务器端格式化为问题中所示的带花括号的字符串。因此,它以字符串的形式到达回调函数,这可以解释错误消息。使用$.getJSON并没有从服务器页面得到任何东西,正如我现在所写的那样。因此,我不知道服务器页面是否可用。我想我会尝试一个ColdFusion论坛来修复这个页面。FrankFMike,在上面的所有答案中,建议的JSON.parse函数抛出错误“无效字符”(MSIE脚本调试器)。所以你想知道上下文是什么是对的。我使用了ColdFusion查询,并将输出服务器端格式化为问题中所示的带花括号的字符串。因此,它以字符串的形式到达回调函数,这可以解释错误消息。使用$.getJSON并没有从服务器页面得到任何东西,正如我现在所写的那样。因此,我不知道服务器页面是否可用。我想我会尝试一个ColdFusion论坛来修复这个页面。FrankFThank感谢您的回答,我无法正确测试,因为我显然在服务器端页面上有一个重大错误,该页面将数据发送到回调函数。在Musa(上文)帮助我更正数据字符串中的引号后,您的建议非常有效。谢谢你的帮助!Frank谢谢您的回答,我无法正确测试您的回答,因为我显然在将数据发送到回调函数的服务器端页面上有一个重大错误。在Musa(上文)帮助我更正数据字符串中的引号后,您的建议非常有效。谢谢你的帮助!Frank谢谢你的回答,我无法正确测试,因为我显然在服务器端页面上有一个重大错误,该页面将数据发送到回调函数。谢谢你的回答,我无法正确测试它,因为我在服务器端页面上有一个重大错误,该页面将数据发送到回调函数。我尝试了这个方法,因此我的MSIE脚本调试器告诉我jQuery代码的第2行中有一个无效字符!返回a.JSON.parse(b)@user1781623您是否将
    {肉:'牛肉',蔬菜:'胡萝卜',土豆:'mashed'}
    更改为
    {“肉:'牛肉','蔬菜:'胡萝卜','土豆:'mashed'}
    ?抱歉,将所有单引号更改为双引号后,一切正常!事件数据是一个包含ColdFusion变量的字符串,这些变量在引号方面有自己的特性。现在一切都好了!谢谢你的帮助!我尝试了这个,于是我的MSIE脚本调试器告诉我