Javascript jQuery如何在其$.ajax方法中实现async:false?
我有一个问题,但我想我应该用另一种方式来问它,以撒下更大的网。我还没有(据我所知)找到一个可行的解决办法 我希望XCode发出一个JavaScript命令,并从executeSql回调返回一个返回值 根据我所阅读的研究,我无法发出同步executeSql命令。我最近一次尝试旋转锁,直到收到回叫。但这也没有奏效。也许我的旋转没有给回调返回的机会(参见下面的代码) 问:对于Ajax,jQuery怎么会有async=false参数?XHR与executeSql命令有什么不同吗 以下是我迄今为止的概念证明:(请不要笑)Javascript jQuery如何在其$.ajax方法中实现async:false?,javascript,jquery,xcode,asynchronous,Javascript,Jquery,Xcode,Asynchronous,我有一个问题,但我想我应该用另一种方式来问它,以撒下更大的网。我还没有(据我所知)找到一个可行的解决办法 我希望XCode发出一个JavaScript命令,并从executeSql回调返回一个返回值 根据我所阅读的研究,我无法发出同步executeSql命令。我最近一次尝试旋转锁,直到收到回叫。但这也没有奏效。也许我的旋转没有给回调返回的机会(参见下面的代码) 问:对于Ajax,jQuery怎么会有async=false参数?XHR与executeSql命令有什么不同吗 以下是我迄今为止的概念证
//首先定义多次引用的任何dom元素。
var dom={};
dom.TestID=$('#TestID');//
dom.msg=$('#msg');/
window.dbo=openDatabase('POC','1.0','Proof-Of-Concept',1024*1024);//1MB
!函数($,窗口,未定义){
var Variables={};//从一个函数传递到另一个函数的变量。
Variables.Ready=new$.Deferred();
Variables.DropTableDeferred=新的$.Deferred();
Variables.CreateTableDeferred=新的$.Deferred();
window.dbo.transaction(函数(myTrans){
myTrans.executeSql(
“跌落台试验;”,
[],
Variables.DropTableDeferred.resolve()
//,WebSqlError
);
});
$.when(Variables.DropTableDeferred).done(function(){
window.dbo.transaction(函数(myTrans){
myTrans.executeSql(
'如果不存在,则创建表测试'
+“(TestID整数不是空主键”
+“,TestSort Int”
+ ');',
[],
Variables.CreateTableDeferred.resolve(),
WebSqlError
);
});
});
$.when(Variables.CreateTableDeferred).done(函数(){
对于(变量i=0;i<10;i++){
我的功能(i);
};
Variables.Ready.resolve();
函数myFunction(i){
window.dbo.transaction(函数(myTrans){
myTrans.executeSql(
'插入测试(TestID,TestSort)值(?,)',
[
我
,i+100000
]
,函数(){}
,WebSqlError
)
});
};
});
$.when(Variables.Ready).done(function(){
$(“#保存”).removeAttr('disabled');
});
}(jQuery,窗口);
!函数($,窗口,未定义){
var变量={};
$(文档)。在('单击','保存',函数()上){
var local={};
local.result=barcode.Scan(dom.TestID.val());
console.log(local.result);
});
var mySuccess=函数(事务、参数){
var local={};
for(local.i=0;local.i”);
}
dom.msg.append(result.message);
}
}(jQuery,窗口);
XHR与executeSql命令有什么不同吗
有点
对于Ajax,jQuery怎么会有async=false参数
Ajax,或者更确切地说,并不是严格限制为异步的——不过,正如建议的那样,它是首选的
jQuery.ajax()
的async
选项与以下参数的boolean async
关联:
如果运行脚本的环境没有实现这个接口,那么您就只能使用异步API,return
ing结果将不可行。由于您怀疑的原因,您不能强制阻止/等待异步任务:
也许我的旋转没有给回调返回的机会(参见下面的代码)
XHR与executeSql命令有什么不同吗
有点
对于Ajax,jQuery怎么会有async=false参数
Ajax,或者更确切地说,并不是严格限制为异步的——不过,正如建议的那样,它是首选的
jQuery.ajax()
的async
选项与以下参数的boolean async
关联:
如果运行脚本的环境没有实现这个接口,那么您就只能使用异步API,return
ing结果将不可行。由于您怀疑的原因,您不能强制阻止/等待异步任务:
也许我的旋转没有给回调返回的机会(参见下面的代码)
我认为new$.Deferred()
不是必需的$.Deferred()
// First define any dom elements that are referenced more than once.
var dom = {};
dom.TestID = $('#TestID'); // <input id="TestID">
dom.msg = $('#msg'); // <div id="msg"></div>
window.dbo = openDatabase('POC','1.0','Proof-Of-Concept', 1024*1024); // 1MB
!function($, window, undefined) {
var Variables = {}; // Variables that are to be passed from one function to another.
Variables.Ready = new $.Deferred();
Variables.DropTableDeferred = new $.Deferred();
Variables.CreateTableDeferred = new $.Deferred();
window.dbo.transaction(function(myTrans) {
myTrans.executeSql(
'drop table Test;',
[],
Variables.DropTableDeferred.resolve()
// ,WebSqlError
);
});
$.when(Variables.DropTableDeferred).done(function() {
window.dbo.transaction(function(myTrans) {
myTrans.executeSql(
'CREATE TABLE IF NOT EXISTS Test'
+ '(TestID Integer NOT NULL PRIMARY KEY'
+ ',TestSort Int'
+ ');',
[],
Variables.CreateTableDeferred.resolve(),
WebSqlError
);
});
});
$.when(Variables.CreateTableDeferred).done(function() {
for (var i=0;i < 10;i++) {
myFunction(i);
};
Variables.Ready.resolve();
function myFunction(i) {
window.dbo.transaction(function(myTrans) {
myTrans.executeSql(
'INSERT INTO Test(TestID,TestSort) VALUES(?,?)',
[
i
,i+100000
]
,function() {}
,WebSqlError
)
});
};
});
$.when(Variables.Ready).done(function() {
$('#Save').removeAttr('disabled');
});
}(jQuery, window);
!function($, window, undefined) {
var Variables = {};
$(document).on('click','#Save',function() {
var local = {};
local.result = barcode.Scan(dom.TestID.val());
console.log(local.result);
});
var mySuccess = function(transaction, argument) {
var local = {};
for (local.i=0; local.i < argument.rows.length; local.i++) {
local.qry = argument.rows.item(local.i);
Variables.result = local.qry.TestSort;
}
Variables.Return = true;
};
var myError = function(transaction, argument) {
dom.msg.text(argument.message);
Variables.result = '';
Variables.Return = true;
}
var barcode = {};
barcode.Scan = function(argument) {
var local = {};
Variables.result = '';
Variables.Return = false;
window.dbo.transaction(function(myTrans) {
myTrans.executeSql(
'SELECT * FROM Test WHERE TestID=?'
,[argument]
,mySuccess
,myError
)
});
for (local.I = 0;local.I < 3; local.I++) { // Try a bunch of times.
if (Variables.Return) break; // Gets set in mySuccess and myError
SpinLock(250);
}
return Variables.result;
}
var SpinLock = function(milliseconds) {
var local = {};
local.StartTime = Date.now();
do {
} while (Date.now() < local.StartTime + milliseconds);
}
function WebSqlError(tx,result) {
if (dom.msg.text()) {
dom.msg.append('<br>');
}
dom.msg.append(result.message);
}
}(jQuery, window);
void open(
DOMString method,
DOMString url,
optional boolean async, // <---
optional DOMString user,
optional DOMString password
);
window.dbo = openDatabaseSync('POC','1.0','Proof-Of-Concept', 1024*1024);
var results;
window.dbo.transaction(function (trans) {
results = trans.executeSql('...');
});