使用$get()获取外部模板数据的问题

mustache.js - issues in getting external template data using $get()

本文关键字:数据 问题 外部 获取 get 使用      更新时间:2023-09-26

js和我得到外部模板使用$get()方法如下所示

function open_device_player(device_id)   
{
        var device_data={
                device_id:device_id
            };
        var n;
        $.get('js/temp.html', function(template, textStatus, jqXhr) {
                 n=Mustache.render($(template).filter('#pageTpl').html(), device_data);
                alert("inside get: "+n);
       });
        alert("outside get: "+n);
        $("body").append(n);
    }
    $( ":mobile-pagecontainer" ).pagecontainer( "change", "#videodiv_"+device_id );
    return false;
}

这是我的模板文件temp。html

<script id="pageTpl" type="text/template">
    <div data-role='page' id='videodiv_{{device_id}}'>
        <div data-role=header>
            <h1> Device Page </h1>
        </div>
        <div data-role=content>
            <img id='vid_{{device_id}}' src='http://localhost/mobilestreamvideo/mjpg/{{device_id}}' width='320'>
        </div>
    </div>
</script>

我的问题是我不能使用变量数据 n 外面$get()块,当我使用警报来显示 n 首先外部警报显示,然后警报内部$get()块显示。

这是因为$。get$。ajax是异步调用。它之后的代码不会等待它完成,这就是为什么alert在$之外。在$.get中找到警报之前触发get。基本上美元。Get调用将触发,其余代码将继续工作,当$。一旦完成,它将触发内部回调函数。

您需要在$中添加新内容。

如果你真的需要使它同步,你将需要使用$。ajax函数,并设置async参数为false。但是要注意,在这种情况下,整个页面执行将停止,至少直到$。ajax 结束。