我有一个JavaScript小部件,它提供标准的扩展点.其中之一就是beforecreate功能.它应该返回false以防止创建项目.
我使用jQuery在这个函数中添加了一个Ajax调用:
beforecreate: function (node, targetNode, type, to) {
jQuery.get('http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),
function (result) {
if (result.isOk == false)
alert(result.message);
});
}
Run Code Online (Sandbox Code Playgroud)
但我想阻止我的小部件创建项目,所以我应该返回false母函数,而不是回调.有没有办法使用jQuery或任何其他浏览器中的API执行同步AJAX请求?
我怎样才能做到这一点
var asyncToSync = syncFunc();
function syncFunc() {
var sync = true;
var data = null;
query(params, function(result){
data = result;
sync = false;
});
while(sync) {}
return data;
}
Run Code Online (Sandbox Code Playgroud)
我试图从异步中获取同步功能,我需要它使用FreeTds异步查询作为同步功能
这是一个奇怪的问题.我有一个客户端对象,我正在使用Crockford式公共/私人成员构建:
var client = function() {
var that, remote_data, other_data;
// add public interface
that.doStuff = function(){...}
// wait for remote resources to load
remote_data = jsonRequest1();
other_data = jsonRequest2();
return that;
};
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我需要加载一些远程JSON资源,然后再返回新的'that'对象(它指示就绪客户端).数据以异步方式返回(显然),我设置布尔变量以指示每个远程资源何时返回.
我想过做以下事情:
return whenInitialized(function() { return that; });
Run Code Online (Sandbox Code Playgroud)
whenInitialized函数返回两个布尔标志是否为真.我将它与setInterval的组合一起使用,但我确信这不起作用.
非常感谢您的建议.
indexedDB有一个规范说您可以同步访问索引数据库,但尚未实现.
我只是想知道是否有办法让它手动同步,
我的JavaScript看起来像这样,
var trans = databaseAsync.transaction(["mapTile"], IDBTransaction.READ_WRITE);
var store = trans.objectStore("mapTile");
var keyRange = IDBKeyRange.bound(evt.data[0], evt.data[0]);
var cursorRequest = store.openCursor(keyRange);
// can you put some kind of wait in here?
cursorRequest.onsuccess = function(e)
{
var result = e.target.result;
if(!!result == false)
{
}
}
Run Code Online (Sandbox Code Playgroud)
那么你可以在那里放一些东西让它等到onsuccess方法被调用后再继续吗?
我想这样做的原因是上面的代码包含在这个方法中,
dojo.extend(esri.layers.ArcGISTiledMapServiceLayer, {
getTileUrl : function(level, row, col)
{
// blah
return url;
}
Run Code Online (Sandbox Code Playgroud)
所以它是一个ESRI图块层(它会将图块加载到我的网页上的地图上),并且该方法需要立即返回特定图块的网址.它将是一个加载图像的URL,如果它没有缓存在数据库中,或者这个,
data:image;base64,*BASE64DATA*
Run Code Online (Sandbox Code Playgroud)
其中BASE64DATA是以前缓存的数据库中的数据.
我之前使用的是localStorage,它同步工作,但是有5MB的限制,所以我想我会尝试使用indexedDB.