Fre*_*red 36 ajax jquery sync synchronous getjson
目标:我想要的是从数据库中获取数据并刷新main.php(通过draw_polygon更明显)每次在数据库中添加内容时(在$ .ajax之后提交给submit_to_db.php).
所以基本上我有一个main.php将ajax调用另一个php来接收一个将被保存到数据库的数组,并且json调用另一个php来返回一个数组将被main.php使用.
$(document).ready(function() {
get_from_db();
$('#button_cancel').click(function(){
$.ajax({
url: 'submit_to_db.php',
type: 'POST',
data: {list_item: selected_from_list},
success: function(result){
...
get_from_db();
}
});
});
function get_from_db(){
$.getJSON('get_from_db.php', function(data) {
...
draw_polygon(data);
});
}
});
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我所做的是一个get_from_db
函数调用,getJSON
实际从数据库中获取数据,并使用数据draw_polygon
.但是应该怎么做呢?我是一个完整的新手,这是我第一次尝试getJSON
和ajax说实话.所以我的问题:异步如何实际工作?是否有其他的办法解决这个,而不必调用函数get_from_db
与getJSON
(这是不同步的,是它那为什么它时,它不是一个函数内没有更新页面?)所有的时间-就像$.ajax
用async: false
(顺便说一句,我无法让它工作.我的方法很有效,但我想也许还有其他更好的方法可以做到.我很想学习如何.提前致谢.我希望我有任何意义.
为了使它更清晰,这就是我想要实现的目标:
@start
页面,从数据库中获取数据(目前通过getJSON
)canvas
使用data
cch*_*lis 49
由于$ .getJSON()使用ajax配置,只需设置全局ajax配置:
// Set the global configs to synchronous
$.ajaxSetup({
async: false
});
// Your $.getJSON() request is now synchronous...
// Set the global configs back to asynchronous
$.ajaxSetup({
async: true
});
Run Code Online (Sandbox Code Playgroud)
tob*_*spr 22
异步意味着请求在后台运行,并在收到响应时调用您的函数.如果您想获得结果但允许在请求中使用您的应用,则此方法最佳.如果您想要直接响应,请查看同步请求.此请求将暂停脚本执行,直到收到响应,并且用户在收到响应之前无法执行任何操作.您可以通过以下方式切换:
async: false,
Run Code Online (Sandbox Code Playgroud)
例如:
$.ajax({
url: "myurl",
async: false,
...
})
Run Code Online (Sandbox Code Playgroud)
Rob*_*kal 19
$ .getJSON(),不接受配置,因为它在文档中说它是一个速记版本:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
Run Code Online (Sandbox Code Playgroud)
所以只需重写你的请求和async:false就会像你期望的那样工作.
R. *_*olt 11
$.getJSON()
是一种$.ajax()
可以配置为同步的简写表示法(请参阅jQuery.getJSON和JQuery.ajax):
$.ajax({
dataType: "json",
url: url,
data: data,
async: false,
success: function(data) {
...
draw_polygon(data);
}
});
Run Code Online (Sandbox Code Playgroud)
尽量避免同步调用.从jQuery doc引用(参见async prop):
跨域请求和dataType:"jsonp"请求不支持同步操作.请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作.
您可能想尝试像这样的jQuery Deferred:
var jqxhr = $.getJSON(url);
jqxhr.done(function(data) {
...
draw_polygon(data);
});
Run Code Online (Sandbox Code Playgroud)