Javascript 检查图像是否存在并生成字符串

Javascript 检查图像是否存在并生成字符串,javascript,jquery,Javascript,Jquery,我正在尝试根据图像是否存在来构建字符串,如果存在,则构建图像标记,如果不存在,则创建一个空的div标记和一个类。没有图像我如何实现这一点-有人能给我一些帮助吗 $('#search_movies').select2({ ajax: { url: "http://localhost:8000/admin/tmdb/search", dataType: 'json', delay: 250, type: 'POST',

我正在尝试根据图像是否存在来构建字符串,如果存在,则构建图像标记,如果不存在,则创建一个空的div标记和一个类。没有图像我如何实现这一点-有人能给我一些帮助吗

    $('#search_movies').select2({
    ajax: {
        url: "http://localhost:8000/admin/tmdb/search",
        dataType: 'json',
        delay: 250,
        type: 'POST',
        results: function (data, page) {
            console.log(data);
            return { results: data.d };
        },
        data: function (params) {
          return {
            q: params.term, // search term
            // page: params.page
          };
        },
        processResults: function (data, params) {
          // parse the results into the format expected by Select2
          // since we are using custom formatting functions we do not need to
          // alter the remote JSON data, except to indicate that infinite
          // scrolling can be used
          //params.page = params.page || 1;

          console.log(data)
          return {
            results: data.items,
            // pagination: {
            //   more: (params.page * 30) < data.total_count
            // }
          };
        },
        cache: false
      },
      escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
      minimumInputLength: 1,
      templateResult: formatRepo, // omitted for brevity, see the source of this page
      templateSelection: formatRepoSelection // omitted for brevity, see the source of this page
    });


function formatRepo(repo) {
    if (repo.loading) return repo.text;


    var markup = '<div data-id="' + repo.id + '" class="option clearfix">';
        markup += '<div class="option-image"><img alt="" src="' + repo.image + '"></div>';
        markup += '<div class="option-content">';
            markup += '<h4>' + repo.title + '</h4>';
            markup += '<h4>' + repo.release_date + '</h4>';
            markup += '<h4>' + repo.popularity + '</h4>';
        markup += '</div>';
    markup += '</div>';


    return markup;
}


function formatRepoSelection (repo) {
    return repo.title || repo.text;
}
$('search#u movies')。选择2({
阿贾克斯:{
url:“http://localhost:8000/admin/tmdb/search",
数据类型:“json”,
延误:250,
键入:“POST”,
结果:功能(数据、页面){
控制台日志(数据);
返回{results:data.d};
},
数据:函数(参数){
返回{
q:params.term,//搜索项
//页码:params.page
};
},
processResults:函数(数据、参数){
//将结果解析为Select2所需的格式
//因为我们使用的是自定义格式函数,所以不需要
//更改远程JSON数据,除非指示无限
//可以使用滚动
//params.page=params.page | | 1;
console.log(数据)
返回{
结果:数据项,
//分页:{
//更多:(params.page*30)
不要让
formatRepo
返回标记,而是让它将标记传递给回调函数,如

function formatRepo(repo, markupCallback) {
     function imageExists(url, callback) {
        var img = new Image();
        img.onload = function() { callback(true); };
        img.onerror = function() { callback(false); };
        img.src = url;
    }

    imageExists(repo.image, function(exists) {
        var markup = '';
        if(exists) {
            markup += '<img src="' + repo.image + '">'; 
        } else {
            markup += '<div class="no-image"></div>';
        }
        // pass markup to markupCallback
        markupCallback(markup);
    });
}

// and then use it like
formatRepo(myRepo, function(markup){
    // use markup here
});
函数formatRepo(repo,markupCallback){
函数imageExists(url,回调){
var img=新图像();
img.onload=function(){callback(true);};
img.onerror=function(){callback(false);};
img.src=url;
}
imageExists(repo.image,函数)(exists){
var标记=“”;
如果(存在){
标记+='';
}否则{
标记+='';
}
//将标记传递给markupCallback
markupCallback(标记);
});
}
//然后像这样使用它
formatRepo(myRepo,函数(标记){
//在这里使用标记
});

您是否正在尝试确定
url
是否指向图像文件的有效路径?是的,这是正确的代码检查但不生成字符串什么代码将repo.loading设置为true?并设置repo.text
load
元素的
事件是异步的。您也可以使用
$.ajax()
HEAD
request。您需要知道如何使用异步code@ONYX对我来说似乎是不可能的,因为它都被传递到
select2
,我假设它是一个库函数,您不能修改它以适应
formatRepo
的异步特性。