javascript对象的逐行执行

javascript对象的逐行执行,javascript,asynchronous,line-by-line,Javascript,Asynchronous,Line By Line,我正在尝试验证图像URL是否存在,是否使用JavaScript。基本上,我想分配的URL图像,如果它是有效的。但是验证URL的JavaScript函数(不是逐行执行)会破坏逻辑并返回所有URL为真。是否有任何方法可以将控件保存在urlExists函数中,直到其所有线程都完成 当前,控件不等待错误消息的结果,并跳过该消息返回始终为真值的调用函数。你知道我怎样才能让函数保持控制吗 function urlExists(testUrl) { var ret = true; var ne

我正在尝试验证图像URL是否存在,是否使用JavaScript。基本上,我想分配的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)" />
函数urlExists(testUrl){
var-ret=真;
var newImage=newImage();
newImage.src=testUrl;
$(newImage)。错误(
函数(){
ret=假;
}
);
返回ret;
}
函数更改图像路径(obj){
var oldUrl=obj.src;
var newUrl=oldUrl.replace(“abc”、“xyz”);
如果(URL存在(newUrl)){
obj.src=newUrl;
}   
}

还想提到我正在处理跨域图像URL。

您可以将代码作为回调函数传递进来,以修改现有图像。无需创建新图像即可执行检查:

函数urlExists(img、newUrl、回调){
$(img).error(callback).attr('src',newUrl);
}
函数更改图像路径(obj){
var oldUrl=obj.src;
var newUrl=oldUrl.replace(“200”,“x”);
urlExists(obj、newUrl、function(){
obj.src=oldUrl;
});
}

单击以尝试更改图像

映像加载是异步的,否则,HTTP请求将阻塞主线程,站点可能会在几秒钟内失去响应。您需要使用回调而不是返回值。你可以在StackOverflow上找到数千个示例。但是url无论如何都是分配给图像的,无论我是否在错误回调函数中更改url以防图像url无效???@AakashJain我已经更新了代码并添加了一个工作示例与上述答案相关的查询,如果初始图像也无效,然后函数进入回调的无限循环。那么,我们怎样才能打破这个循环呢?