Javascript 检查图像是否存在并生成字符串
我正在尝试根据图像是否存在来构建字符串,如果存在,则构建图像标记,如果不存在,则创建一个空的div标记和一个类。没有图像我如何实现这一点-有人能给我一些帮助吗Javascript 检查图像是否存在并生成字符串,javascript,jquery,Javascript,Jquery,我正在尝试根据图像是否存在来构建字符串,如果存在,则构建图像标记,如果不存在,则创建一个空的div标记和一个类。没有图像我如何实现这一点-有人能给我一些帮助吗 $('#search_movies').select2({ ajax: { url: "http://localhost:8000/admin/tmdb/search", dataType: 'json', delay: 250, type: 'POST',
$('#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.textload
元素的
事件是异步的。您也可以使用$.ajax()
HEAD
request。您需要知道如何使用异步code@ONYX对我来说似乎是不可能的,因为它都被传递到select2
,我假设它是一个库函数,您不能修改它以适应formatRepo
的异步特性。