我的问题如下:
我有许多表面与一个唯一的网址相关联。当我移动到特定表面时,必须实时触发url(ajax),并且应将响应设置为曲面的内容。
当我尝试执行上述操作时,它实际上会在应用初始化时预先加载所有网址及其内容。这会减慢整个过程,而不是我想要的。我只想在用户在该表面上处于活动状态时加载内容。
var ajaxContent = "";
$.ajax({
url: 'ajax/article.php?url='+escape(this.options.url),
async: false,
success: function(data) {
ajaxContent = data;
}
});
this.pageSurface = new Surface({
size: [undefined, undefined],
content: ajaxContent,
classes: ["page"],
properties: {
backgroundColor: '#111111',
fontSize: '16px'
}
});
以上代码位于曲面循环中。
答案 0 :(得分:1)
我没有使用Ajax的经验,但据我所知,基于你的描述基本上你是异步请求数据......所以我会根据这个假设回答。
首先,我会稍微改变操作顺序!
for (var i = 0; i < 10; i++) {
var surface = new Surface({
content : '',
classes : ['page'],
properties : {
backgroundColor : '#111111',
fontSize : '16px'
}
});
var ajax_request = {
url : 'ajax/article.php?url=' + escape(this.options.url),
async : true,
success : function(data) {
//possibly validate the obtained data further
this.setContent(data);
}.bind(surface)
}
var load = function load() {
this.removeListener('mouseover', load);
$.ajax(ajax_request);
}.bind(surface);
surface.on('mouseover', load);
}
我将表面绑定到特定于该表面的所有函数,否则可能会在循环内发生奇怪的事情。这将确保只有一个表面加载内容,并且内容仅分配给同一个表面!
最后,您应该注意单引号和双引号,因为您同时使用它们。 Famo.us(该公司)更喜欢单引号,但如果你使用双引号就好了。至少坚持两者中的任何一个都是一种更好的做法。