Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在$(window.load()之前执行异步jQuery.get()?_Javascript_Jquery_Svg - Fatal编程技术网

Javascript 如何在$(window.load()之前执行异步jQuery.get()?

Javascript 如何在$(window.load()之前执行异步jQuery.get()?,javascript,jquery,svg,Javascript,Jquery,Svg,我希望在启动$(window).load()之前将SVG文件加载到变量中 我使用jQuery.get()加载文件。问题是,该函数异步工作,在读取SVG文件时,已经调用了$(window).load() 所以我有以下代码: var data; $(document).ready(function () { jQuery.get( "my.svg", function (_data) { data = _data; }

我希望在启动$(window).load()之前将SVG文件加载到变量中

我使用jQuery.get()加载文件。问题是,该函数异步工作,在读取SVG文件时,已经调用了$(window).load()

所以我有以下代码:

var data;

$(document).ready(function () {
    jQuery.get(
        "my.svg",
        function (_data) {
            data = _data;
        },
        'text');
});


$(window).load( function () {
    alert(data);
});
警报将显示“未定义”。如果稍后将调用它(例如,5秒后),那么它将显示SVG文件的内容


有什么建议吗?谢谢

我同意,如果您想以艰难的方式完成任务,setInterval可能是您想要的解决方案,因为您永远无法知道AJAX请求需要多长时间

我建议将您的代码重新构造为如下:

<script>

$(document).ready(function () {

    //this can remain async: TRUE
    jQuery.get(
        "my.svg",
        function (_data) {

            //call function to do something to svg file
            //if you are relying on the SVG to be there in order to call an action
            //then why not wait for the SVG to load first and then call the action
            svgAction(_data);

        },
        'text');

    function svgAction(img_code){
        //do something with img code now
    }

});

</script>

$(文档).ready(函数(){
//这可以保持异步:TRUE
jQuery.get(
“my.svg”,
函数(_数据){
//调用函数对svg文件执行操作
//如果您依赖SVG来调用某个操作
//那么,为什么不先等待SVG加载,然后调用操作呢
svgAction(_数据);
},
“文本”);
函数SVGAAction(img_代码){
//现在就用img代码做点什么吧
}
});

使用此方法,需要一个
setInterval
和一个检查
数据内容的条件语句。您可以强制执行同步请求。或者使用setInterval。谢谢!我同意它肯定比setInterval()好。但这种方法相当复杂。尤其是当必须预加载多个SVG文件时。我希望有一些简单的解决办法:-)很高兴我能帮上忙!顺便说一句,这是一个简单的解决方案……而且我不认为在原始问题中提到/暗示了多个SVG。你可能应该为此开始一个新问题。