【发布时间】:2015-08-27 09:09:27
【问题描述】:
我正在尝试使用 JavaScript 验证图像 URL 是否存在。基本上,如果有效,我想将 URL 分配给图像。但是验证 URL 的 JavaScript 函数由于没有逐行执行,因此会破坏逻辑并返回所有 URL 为真。有什么方法可以在 urlExists 函数中保留控件,直到其所有线程都完成?
当前控件不等待错误消息的结果,而是总是跳过它返回到调用函数的真值。知道如何让函数在这里保持控制吗?
function urlExists(testUrl) {
var ret = true;
var newImage = new Image();
newImage.src = testUrl;
$(newImage).error(
function(){
ret = false;
}
);
return ret;
}
function changeImagePath(obj){
var oldUrl = obj.src;
var newUrl = oldUrl.replace("abc","xyz");
if(urlExists(newUrl)){
obj.src = newUrl;
}
}
<img src="http://sample.com/images/srpr/logo_abc.png" onclick="changeImagePath(this)" />
还意味着我正在处理跨域图像 URL。
【问题讨论】:
-
图片加载是异步的,否则,HTTP 请求会阻塞主线程,网站可能会在几秒钟内无响应。您需要使用回调而不是返回值。您可以在 StackOverflow 上找到数千个示例。
标签: javascript asynchronous line-by-line