【问题标题】:Create an array in jquery and check if it's an element在jquery中创建一个数组并检查它是否是一个元素
【发布时间】:2011-04-13 14:17:21
【问题描述】:

在使用 ajax 和 json 获取一些数据后,我有了这个功能

    if(data.length != 0) {
        var arreglo = new Array();
        $.each(data, function(index, data) {
            if (jQuery.inArray(data.id, arreglo) == -1) {
                arreglo.push(data.id);
                $("#envivo").append("<li>Titulo: " + data.titulo + " Link: " + data.link + " Fuente: " + data.fuente + "</li>");
            }
        });
    }
}
$(document).ready(function() {
    var fecha = Math.round((new Date()).getTime() / 1000);
    setInterval(function() {
        $.ajax({
            data: "fecha="+fecha,
            type: "GET",
            dataType: "json",
            url: "data.php",
            success: function(data){
                restults(data);
            }
        });
    }, 5000);
});

我想做什么

  1. 检查是否从 ajax 检索到任何数据
  2. 创建一个数组来存储data.id
  3. 在来自 ajax 的数据中循环
  4. 检查 data.id 是否在 [2] 中创建的数组中
  5. 如果 id 不在数组中,我将其保存并应用一些数据

step 4 它不工作并且是 5 的一部分(保存到数组中)

有什么想法吗?

提前致谢

【问题讨论】:

  • 任何错误信息? inArray 方法返回什么?
  • 不,任何错误消息...它不断地追加,所以我认为数组检查它是错误的 A 已经添加了我的整个 js。

标签: jquery ajax arrays json


【解决方案1】:

inArray 函数使用恒等比较运算符 (===)。

如果数据将 id 作为字符串返回,但您将其解释为数字,这将导致问题。

"9" ==== 9

"9" == 9

【讨论】:

  • 我正在使用 inArray 来检查 data.id 是否在数组中...使用 == -1 是否错误?
  • 那部分是正确的,但在您提供的数据示例中,id 实际上是“17”,而不是 17。inArray 函数将不匹配 17 和“17”,因为它们不是相同的数据类型.要么将数据作为数字发送,要么循环遍历返回的数据并 parseInt 强制其为正确的数据类型。
  • 嗨,保罗。我怎样才能很好地发送数据?我正在使用 json 编码...看看 data.php $fecha = $_GET['fecha']; $feed = 数组(); $result = mysql_query("SELECT * FROM envivo WHERE fecha >= '".$fecha."' ORDER BY fecha DESC"); $existe = mysql_num_rows($result); if ($existe != 0) { while ($data = mysql_fetch_array($result)) { $jsondata = array(); $jsondata['id'] = $data['id']; $jsondata['titulo'] = $data['titulo']; $jsondata['link'] = $data['link']; $jsondata['fuente'] = $data['fuente']; $feed[] = $jsondata; } 回声 json_encode($feed); } 再次感谢
  • 这应该不是问题,因为添加到数组中的值与用于在数组中搜索的值类型相同。
  • 那么 id 的问题在哪里?
【解决方案2】:

我已经试过你的代码,它工作得很好:

http://jsfiddle.net/Jfq6d/

您必须检查您获得的数据实际上是否符合您的预期。例如,您可以使用 Firefox 中 FireBug 插件中的“网络”选项卡来检查您在 AJAX 调用中获得的响应。

编辑:

由于要复用函数,所以必须在函数外创建数组:

var arreglo = [];

function restults(data) {
  if(data.length != 0) {
    $.each(data, function(index, data) {
      if (jQuery.inArray(data.id, arreglo) == -1) {
        arreglo.push(data.id);
        $("#envivo").append("<li>Titulo: " + data.titulo + " Link: " + data.link + " Fuente: " + data.fuente + "</li>");
      }
    });
  }
}

【讨论】:

  • 数据是这样的 [{"id":"17","titulo":"Radio LocalStrike tiene un nuevo programa, Ranking Fusa","link":"http:\/\/www .localstrike.net\/radio\/noticias-55\/radio_localstrike_tiene_un_nuevo_programa_ranking_fusa-1283","fuente":"LocalStrike"}]
  • @Zuker:我试过这样的数据,它仍然有效:jsfiddle.net/Jfq6d/1 结论是数据实际上不是那样的,你必须检查数据的真实样子。
  • Guffa 请尝试使用带有 setInterval 的完整代码来复制它,这样您当然可以检查 id 是否正在复制
  • @Zuker:该方法不会添加任何重复项,但如果您多次运行它,它不会阻止添加之前添加的项目。如果你想让它记住从一次执行到下一次执行的 id,你必须在函数之外创建数组。
  • @Guffa:inArray 方法的一个问题是,如果在您的浏览器中可用,它会运行本机 indexOf 函数。该函数可能不使用 === 运算符,因此比较函数最终取决于浏览器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2011-06-15
  • 1970-01-01
  • 2021-01-30
  • 2017-03-03
  • 1970-01-01
相关资源
最近更新 更多