Jquery 使用$.each进行迭代时

Jquery 使用$.each进行迭代时,jquery,iteration,each,Jquery,Iteration,Each,在遍历包含数据的对象时,我检查image的url是否对函数有效。问题是,函数检查映像只对最后一个对象运行了8次。谁都知道为什么 功能检查图像: function checkImage(url, succ, err){ var checkImg = new Image(); checkImg.src = url; checkImg.onerror = function() { err(); }; } 以及每一部分: var obj = {}, se

在遍历包含数据的对象时,我检查image的url是否对函数有效。问题是,函数检查映像只对最后一个对象运行了8次。谁都知道为什么

功能检查图像:

function checkImage(url, succ, err){
    var checkImg = new Image();
    checkImg.src = url;
    checkImg.onerror = function() {
        err();
    };
}
以及每一部分:

var obj = {},
searchResults = [];

$.each(data, function(i, m){
    obj = {'image': m.park_photo1_290x220, 'name': m.park_name, 'developer': m.park_developer_name,
    'location': m.park_location_name, 'exact_location': m.park_location_parent_name,
    'total_area': m.area, 'free_area': m.free_area, 'id': m.id, 'lat': m.park_lat, 'lon': m.park_lon};                            
    var uri = obj.image;
    console.log('object');

    checkImage(uri, function(){
        obj.image = uri;
    }, function() {
        console.log(x++);
        console.log(obj.name+','+obj.image);
        obj.image = 'images/no_foto_ssmall.png';
        console.log(obj.image);
    });

    searchObjects.push(obj);

    $('#search-results').append(''+
        '<li class=\"ui-li-has-thumb ui-btn ui-btn-icon-right ui-li ui-btn-up-c\" role=\"option\" tabindex=\"'+ i +'\" data-theme=\"c\"><div>'+
        '<img src=\"'+ searchObjects[i].image +'\" class="ui-li-thumb">'+
        '<h3 class="ui-li-heading"><a href="#" class="ui-link-inherit single" name=\"'+ i +'\">'+ 
        searchObjects[i].name +'</a></h3></div>'+
        '<div class=\"search-detail\"><p>'+ searchObjects[i].developer +'</p></div>'+
        '<div class=\"search-detail\"><p>'+ searchObjects[i].location +'</p></div>'+
        '<span class=\"ui-icon ui-icon-arrow-r\"></span></li>'
    );
});
o_foto_ssmall.png 图片/否\u foto\u ssmall.png


编辑

应要求,我的目标是:

var data = [{"total_area": 10800.0, "developer_id": 1511, 
    "photo1_290x220": "/static/realestate/wp/wpp176885389187907.jpg.290x220_q85.jpg", 
    "location_parent_name": "BZZ", "agent_phone_fax": "", 
    "location_id": 147, "id": 760, "developer_fax": "", "location_name": "ABC", 
    "lon": 10.870075199999999, "object_id": 201, "developer_name": "Orpo", 
    "agent_id": 8,"lat": 52.2079223, "warehouses_counter": 1, 
    "name": "Park 1","agent_phone_mobile": "+48 668 124 152", "featured": false, 
    "location_parent_id": 106}, 
    {"total_area": 30780.0, "developer_id": 193, 
    "photo1_290x220": "/static/realestate/wp/wpp195908774409312.JPG.290x220_q85.jpg", 
    "location_parent_name": "CDE", "agent_phone_fax": "", "location_id": 138, 
    "id": 761, "developer_fax": "", "location_name": "XYZ", 
    "lon": 20.9232473, "object_id": 187, "developer_name": "Orco","lat": 32.171918300000002, 
    "warehouses_counter": 5, "name": "Park 2","featured": false, 
    "location_parent_id": 106}]

所有闭包都在相同的范围内关闭,因此相同的
obj
实例在调用
obj
时异步调用
onerror

解决方案应该是在
obj
之前添加
var

var obj = {'image': ...

这将执行两次相同的代码,一次使用修复程序,一次不使用修复程序。

看起来您的变量
obj
定义超出了范围,因此无法正确计算

可能
searchResults
变量应该是
searchObjects
1

它看起来像是你试图从散列中读取不正确的数据,所以它几乎在任何地方都返回
undefined

My be此代码可以帮助您:

var x = 0;
var obj = {},
searchObjects = [];

$.each(data, function(i, m){
    var obj1 = {'image': m.photo1_290x220, 'name': m.name, 'developer': m.developer_name,
    'location': m.location_name, 'exact_location': m.location_parent_name,
    'total_area': m.total_area, 'free_area': m.free_area, 'id': m.id, 'lat': m.lat, 'lon': m.lon};                            
    var uri = obj1.image;

    console.log(obj1.name+','+obj1.image);
    checkImage(uri, function(){
        obj1.image = uri;
    }, function() {
        console.log(x++);
        obj1.image = 'images/no_foto_ssmall.png';
        console.log(obj1.image);
    });

    searchObjects.push(obj1);

    $('#search-results').append(''+
        '<li class=\"ui-li-has-thumb ui-btn ui-btn-icon-right ui-li ui-btn-up-c\" role=\"option\" tabindex=\"'+ i +'\" data-theme=\"c\"><div>'+
        '<img src=\"'+ searchObjects[i].image +'\" class="ui-li-thumb">'+
        '<h3 class="ui-li-heading"><a href="#" class="ui-link-inherit single" name=\"'+ i +'\">'+ 
        searchObjects[i].name +'</a></h3></div>'+
        '<div class=\"search-detail\"><p>'+ searchObjects[i].developer +'</p></div>'+
        '<div class=\"search-detail\"><p>'+ searchObjects[i].location +'</p></div>'+
        '<span class=\"ui-icon ui-icon-arrow-r\"></span></li>'
    );
});
var x=0;
var obj={},
searchObjects=[];
$。每个(数据、函数(i、m){
var obj1={'image':m.photo1_290x220,'name':m.name,'developer':m.developer_name,
“位置”:m.location\u name,“精确位置”:m.location\u parent\u name,
“总面积”:m.total_area,“free_area”:m.free_area,“id”:m.id,“lat”:m.lat,“lon”:m.lon};
var uri=obj1.image;
console.log(obj1.name+','+obj1.image);
checkImage(uri,函数(){
obj1.image=uri;
},函数(){
console.log(x++);
obj1.image='images/no_foto_ssmall.png';
console.log(obj1.image);
});
searchObjects.push(obj1);
$('#搜索结果')。附加(''+
“
  • ”右侧有拇指ui btn ui btn图标+ ''+ ''+ “”+searchObjects[i].开发者+”

    '+ “”+searchObjects[i]。位置+”

    '+ “
  • ” ); });

    这是在fiddler上收集的数据对象是什么样子的?不,这并没有解决任何问题。我在上面声明了var obj.each();以后附件也能正常工作。好的,你说得对,对不起。我在控制台里玩得太多了。必须解决异步问题,并且一切正常:)
    var x = 0;
    var obj = {},
    searchObjects = [];
    
    $.each(data, function(i, m){
        var obj1 = {'image': m.photo1_290x220, 'name': m.name, 'developer': m.developer_name,
        'location': m.location_name, 'exact_location': m.location_parent_name,
        'total_area': m.total_area, 'free_area': m.free_area, 'id': m.id, 'lat': m.lat, 'lon': m.lon};                            
        var uri = obj1.image;
    
        console.log(obj1.name+','+obj1.image);
        checkImage(uri, function(){
            obj1.image = uri;
        }, function() {
            console.log(x++);
            obj1.image = 'images/no_foto_ssmall.png';
            console.log(obj1.image);
        });
    
        searchObjects.push(obj1);
    
        $('#search-results').append(''+
            '<li class=\"ui-li-has-thumb ui-btn ui-btn-icon-right ui-li ui-btn-up-c\" role=\"option\" tabindex=\"'+ i +'\" data-theme=\"c\"><div>'+
            '<img src=\"'+ searchObjects[i].image +'\" class="ui-li-thumb">'+
            '<h3 class="ui-li-heading"><a href="#" class="ui-link-inherit single" name=\"'+ i +'\">'+ 
            searchObjects[i].name +'</a></h3></div>'+
            '<div class=\"search-detail\"><p>'+ searchObjects[i].developer +'</p></div>'+
            '<div class=\"search-detail\"><p>'+ searchObjects[i].location +'</p></div>'+
            '<span class=\"ui-icon ui-icon-arrow-r\"></span></li>'
        );
    });