【问题标题】:jquery .each() value is entire array after ajax returnjquery .each() 值是ajax返回后的整个数组
【发布时间】:2013-09-11 01:20:11
【问题描述】:

我认为我遇到了一个愚蠢的问题。我觉得很愚蠢,我到处都在使用它们。我仍然是 Javascript 的新手,但我正在努力。我通过 .get() 在按钮单击时将“促销代码 id”传递给 perl 脚本,我返回一些“产品 id”,我想遍历这些 id 并替换/更新隐藏的输入值。这看起来很简单,但我在单次迭代中的价值是整个数组?

$.get('./ajax_get_products.pl', { function_name : 'fix_product_dates', promo_id : selected_promo_id }, function(data) {
                    $.each([data], function(i, value) {
                            $('#products_dates :input[id='+value+']').val(output);
                    });
            });

如果我在每个内部执行 alert(value),它会显示整个数组。用于测试 [data] = [51, 52, 53] 的当前值。所以,我期待 alert(value) 向我抛出三个警报,每个警报中都有一个整数。我从 Perl 脚本返回这个(没有选择,因为它是为了工作),我的头从 Perl 回来可能是错误的吗?我试过了

print "Content-Type: text/html\n\n";
print "Content-Type: text/plain\n\n";

提前感谢您的帮助。

【问题讨论】:

  • 删除$.each[data] 周围的括号
  • 使用$.getJSON 代替$.get

标签: jquery perl get each


【解决方案1】:

您正在将一个带有 data 作为唯一项目的数组传递给 $.each(),我认为您想要的是遍历 data 对象

$.get('./ajax_get_products.pl', {
    function_name: 'fix_product_dates',
    promo_id: selected_promo_id
}, function (data) {
    $.each(data, function (i, value) {
        $('#products_dates :input[id=' + value + ']').val(output);
    });
}, 'json');

【讨论】:

  • 请注意data 可能是一个字符串。
  • @KevinB 错过了Content-Type,因为可能是一个数组,dataType 可以作为json 传递来修复它
【解决方案2】:

您返回的数据是字符串而不是数组。 你可以去掉[],然后用逗号分割,将数据转换成数组。

但是,如果您可以访问 perl 脚本,请返回一个 JSON 字符串,这样会更容易使用。

所以返回 {"1":"51", "2":"52", "3":"53"}

然后你可以在循环之前使用 $.parseJSON(data) 。并删除每次调用中数据周围的 []。

【讨论】:

  • 谢谢弗拉德!添加数据 = data.split(',');并删除 [] 解决了我的问题。我确实可以访问 Perl 脚本(因为我写了它,呵呵),但决定只添加这一行。
  • @SpongekyleHashpants 手动解析 JSON 几乎就像用鞋子代替自行车刹车一样。
  • @mpapec 我相信我同意你的观点,在这种情况下,我的返回数据不是 JSON。我只是返回整数来更新输入 id。我选择不返回 JSON。但是,我确实从 ajax 调用返回 JSON,具体取决于传递的函数名称,所有这些都在同一个 pl 脚本中进行自动完成。
  • @SpongekyleHashpants 由于您控制返回,因此只需返回 CSV 数据,这样您就可以避免删除 []
猜你喜欢
  • 2015-09-16
  • 2015-07-10
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2018-09-21
  • 2021-10-17
相关资源
最近更新 更多