【问题标题】:Getting a specific value from a jquery object passed through an ajax request从通过ajax请求传递的jquery对象中获取特定值
【发布时间】:2016-06-05 22:36:21
【问题描述】:

所以我目前有一个设置,当用户单击链接时,链接的 ID 通过 AJAX 发送到 Coldfusion 页面,该页面使用它进行查询并返回一个对象。

jquery 函数如下所示:

$(".thelink").click(function(){

    var link_id = $(this).attr("id");

    var postData ={
        link_id: link_id,
        }

        $.ajax({
            type: "post",
            url: "includes/query.cfm",
            contentType: "application/json",
            data:JSON.stringify(postData),
            datatype: "json",
            success: function(data){
                $("#derpaderp").html(data.DATA.NAME);
            }
        })
})

它将数据发送到 CFM 文件,该文件执行查询并生成单行数据。然后我使用

<CFOUTPUT>#SerializeJSON(myQuery, true)#</CFOUTPUT>

返回数据。这一切都很好,我可以在开发者工具中看到这一点:

现在,如果您回顾一下 AJAX 函数,在“成功”下,我基本上是在尝试访问 DATA 对象中的值,正如您在图像中看到的那样,我收到错误“数据.DATA" 未定义。

关于如何获取 DATA 对象(名称、可见 URL、着陆 URL 等)中项目的值的任何想法

谢谢!


弗拉德的回答解决了上面的问题,但是一个后续问题:

如果我需要像这样对 CFM 文件进行另一个查询:

<CFOUTPUT>
    <cfset object0 = RemoveChars(#SerializeJSON(query1, true)#, 1, 2) >
    <cfset object1 = RemoveChars(#SerializeJSON(query2, true)#, 1, 2) >

    #object0#
    #object1#
</CFOUTPUT>

它给了我这样的 JSON 响应

我仍然需要从 DATA 对象中获取信息,但是现在有两个,如上图所示

我正在尝试这个

$.ajax({
        type: "post",
        url: "includes/query.cfm",
        contentType: "application/json",
        data:JSON.stringify(postData),
        datatype: "json",
        success: function(data){
            var pdata = $.parseJSON(data[0]);
            console.log(pdata);
        }
    })

基于 Vlad 对原始问题的回答,但它引发了错误。

【问题讨论】:

  • 如果你把console.log(data) 放在你的成功函数中会得到什么输出?

标签: jquery json ajax object coldfusion


【解决方案1】:

在您的成功函数中,您可以添加parseJson 函数。您可以使用 console.log 来检查您想要的其他值。

$.ajax({
  type: "post",
  url: "includes/query.cfm",
  contentType: "application/json",
  data:JSON.stringify(postData),
  datatype: "json",
  success: function(data){
    var pdata = $.parseJSON(data);
    console.log(pdata.DATA.VISIBLE_URL)

    //$("#derpaderp").html(pdata.DATA.VISIBLE_URL);
  }
})

【讨论】:

  • 这行得通!我可以发誓我也试过了:P 谢谢弗拉德!
  • 我编辑了原始问题并进行了跟进!我尝试在响应中添加另一个查询,但它似乎破坏了代码
【解决方案2】:

好的,我找到了后续问题的解决方案。

基本上发生的事情是我通过 AJAX 函数发回了两个单独的对象。像这样:

{"COLUMNS": x, "ROWCOUNT":Y, "DATA:Z}
{"COLUMNS": x, "ROWCOUNT":Y, "DATA:Z}

这导致了解析错误,因为有 2 个对象。我通过创建一个要发回的对象来解决这个问题。

<cfset object0 = RemoveChars(#SerializeJSON(query1, true)#, 1, 2) >
<cfset object1 = RemoveChars(#SerializeJSON(query2, true)#, 1, 2) >

<CFOUTPUT>
    {"FIRST":[#object0#], "SECOND":[#object1#]}
</CFOUTPUT>

然后通过这样做在 Jquery 中获取该信息:

$.ajax({
    type: "post",
    url: "includes/query.cfm",
    contentType: "application/json",
    data:JSON.stringify(postData),
    datatype: "json",
    success: function(data){
        var pdata = $.parseJSON(data);
        var object1_data = pdata.FIRST[0];
        var object2_data = pdata.SECOND[0];

        console.log(object1_data.DATA.VISIBLE_URL)

    }
})

这成功地记录了第一个查询中“VISIBLE_URL”的值。

谢谢大家!

【讨论】:

  • 很高兴你知道了。我会建议您也许可以在查询中使用内部联接,这样您就只有一个查询,并且您只会返回一组 json。
猜你喜欢
  • 2012-07-20
  • 2012-07-12
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多