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
< / strong>显示第一个外部警报,然后在$ get()块内显示警报。
答案 0 :(得分:1)
这是因为 $。get ,如 $ .ajax 是异步调用。代码之后它不会等待它完成,这就是为什么在 $。获取之前触发 $。get 之外的警报。基本上$ .get调用将触发,其余代码将继续工作,当$ .get完成时它将触发其内部回调函数。
您需要在 $。获取电话中添加新内容。
如果您确实需要使其同步,则需要使用 $。ajax 函数并将async参数设置为false。但请注意,在这种情况下,您的完整页面执行将暂停,至少在 $ .ajax 完成之前。