javascript - 使用 AJAX 在 JSON 中搜索
问题描述
我必须使用输入中的值在 json 文件中进行搜索,一切都很好地捕获了值和事件,但是当我迭代时,我会发生一些意想不到的事情。如何根据此搜索选择对象?问题是,在执行 .each 时,它会遍历所有记录,即使是那些未找到的记录。
$( document ).on('turbolinks:load', common_events)
function common_events(){
$('.rut-input').on('change', function(event){
$rut = $(this).val();
var searchField = $rut;
var expression = new RegExp(searchField, "i");
event.preventDefault();
$.ajax({
type: "GET",
url: '/companies/',
dataType: 'JSON',
success: function(companies){
$.each(companies, function(i, company) {
if (company.rut.search(expression) > -1){
console.log(company.id);
$('.name-input').empty();
$('.name-input').val(company.name);
$('.name-input').addClass('disabled-input');
$('.form-group').removeClass('hide');
console.log(company.address);
if (company.address == null ){
$('.address-input').removeClass('disabled-input');
};
}
else {
console.log('no encuentra');
console.log(company);
$('.form-group').removeClass('hide');
$('.form-control').removeClass('disabled-input');
};
});
},
error: function(companies){
console.log('A ocurrido un error')
},
});
});
}
执行事件时,同时执行 if 和 else。
解决方案
似乎你真的不想用每个来迭代公司数组。你想找到一个匹配的公司,然后用那个记录做点什么。
success: function(companies){
const company = companies.find(c => c.rut.search(expression) > -1);
if (company) {
console.log(company.id);
$('.name-input').empty();
$('.name-input').val(company.name);
$('.name-input').addClass('disabled-input');
$('.form-group').removeClass('hide');
console.log(company.address);
if (company.address == null ){
$('.address-input').removeClass('disabled-input');
}
} else {
console.log('no encuentra');
console.log(company);
$('.form-group').removeClass('hide');
$('.form-control').removeClass('disabled-input');
}
},
推荐阅读
- php - 在自动建议搜索框中获取记录
- c# - 在循环中执行 LINQ 的 ThenBy 时遇到问题
- javascript - 在 QuerySelector 中仅使用单引号
- c# - 关于将 DataTable 转换为 JSON 的问题
- python - 删除在 python GUI 树视图中选择的行,然后将其从 sqlite3 数据库中删除
- sql - 您如何确定 A 列是否包含 B 列中的某些内容?
- mysql - Mysql子查询或更好的东西
- selenium - selenium framework-popup-xpath 存储库问题
- python - 将列表转换为列表元组
- macos - 将 .terminal 文件的十六进制颜色值转换为 base64