首页 > 解决方案 > 将ajax调用中返回的数据与JS函数中的数组值相等

问题描述

我试图弄清楚如何将 ajax 调用中返回的数据中的值与已建立的数组相等/比较

我有一个itemArray包含“类别”和“颜色”的内容,然后我的 ajax 调用返回一个多级数组,该数组也有一个“类型”,其中包含一个包含类别和颜色级别的数组

我只是想弄清楚如何获取 ajax 返回的数据并简单地说“如果返回数据中的类别与 itemArray 中的类别匹配,则结果 = true”

  var itemArray = JSON.parse('<?php echo json_encode($items);?>');
  //this contains items called 'category' and 'color'

  //console.log(itemArray);
  var code = document.getElementById("code").value;
  $.ajax({
       type:'POST',
       url:'validate',
       data:{code:code},
        _token: '{{ csrf_token() }}',
        success: function(data){
          console.log(data);

          // this dumps an object with the following structure
          /*
                ID
                    name
                        type:array
                            0
                                category
                                color
                            1
                                category
                                color
            */

        }
    });

for(var i =0; i < itemArray.length; i++){
    var obj = itemArray[i];

    if(category == obj.category || color == obj.color {
        result = true;
    }else{
        result = false;
    }
}

标签: javascriptarraysajax

解决方案


success()您必须在自 jQuery 3.0 起已弃用并由此处的方法替换的方法中处理返回的数据done()

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 3.0 开始被删除。您可以改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

在此处查看完整文档

以下代码应满足您的要求。如果没有,您可以轻松修改它以适合您的目的。

var itemArray = JSON.parse('<?php echo json_encode($items);?>');
//this contains items called 'category' and 'color'

//console.log(itemArray);
var code = document.getElementById("code").value;
$.ajax({
    type:'POST',
    url:'validate',
    data:{code:code},
    _token: '{{ csrf_token() }}'
}).done(
    function(data){
        let results = []; // contains result for each item in itemArray
        $.each(itemArray, function(index1, value1) {
            let result = false;
            $.each(data.ID.name.type, function(index2, value2) {
                // both category and color must match
                // if you want either to match use OR (||) instead
                if(value1.category === value2.category && value1.color === value2.color) {
                    result = true;
                    break;
                }
            });
            results.push(result);
        });
        console.log(results); // see your results here
    }
);

此解决方案假定类别是唯一的,颜色不一定是唯一的。它还假设匹配必须具有相同的类别和颜色。所以,如果你有itemArray

[
    { category: 'cat1', color: 'red' }, 
    { category: 'cat2', color: 'white' }, 
    { category: 'cat3', color: 'blue' }
]

并返回 ajax数据

{ 
    ID: { 
        name: { 
            type: [ 
                {category: 'cat1', color: 'red'}, 
                {category: 'cat3', color: 'red'} 
            ] 
        } 
    } 
}

返回的结果将是

[true, false, false]

推荐阅读