目标:我想要的是从数据库获取数据并刷新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);
});
}
});
就我而言,我所做的是get_from_db
函数调用getJSON
实际从数据库中获取数据,并将数据用于draw_polygon
。但是应该怎么做呢?我是一个完整的新手,这是我第一次尝试getJSON
和ajax来说实话。所以我的问题:异步如何实际工作?是否有另一种解决方法,而不必使用get_from_db
调用函数getJSON
(它不是同步的,是吗?这就是为什么它不在页面内时更新页面的原因功能?)所有的时间 - 就像$.ajax
和async: false
一样(顺便说一下,我无法让它工作)。我的方法很有效,但我想也许还有其他更好的方法可以做到。我很想学习如何。提前致谢。我希望我有任何意义。
为了让它更清晰,这就是我想要实现的目标:
@start
页面,从数据库获取数据(目前通过getJSON
)canvas
data
中绘画或绘图
答案 0 :(得分:46)
由于$ .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
});
答案 1 :(得分:21)
Asynchronusly意味着请求正在后台运行,并在收到响应时调用您的函数。如果您想获得结果但允许在请求中使用您的应用,则此方法最佳。如果您想要直接响应,请查看同步请求。此请求将暂停脚本执行,直到收到响应,并且用户在收到响应之前无法执行任何操作。您可以通过以下方式切换:
async: false,
例如:
$.ajax({
url: "myurl",
async: false,
...
})
答案 2 :(得分:19)
$。getJSON(),不接受配置,正如文档中所说,它是一个速记版本:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
所以只需重写您的请求, async:false 就会按照您的预期运作。
答案 3 :(得分:10)
$.getJSON()
是$.ajax()
的简写符号,可以配置为同步(请参阅jQuery.getJSON和JQuery.ajax):
$.ajax({
dataType: "json",
url: url,
data: data,
async: false,
success: function(data) {
...
draw_polygon(data);
}
});
尝试避免同步通话。引自jQuery doc (see async prop):
跨域请求和dataType:“jsonp”请求不支持 同步操作。请注意,同步请求可能是暂时的 锁定浏览器,在请求处于活动状态时禁用任何操作。
你可能想尝试这样的jQuery Deferreds:
var jqxhr = $.getJSON(url);
jqxhr.done(function(data) {
...
draw_polygon(data);
});