目标:我所追求的是从数据库中获取数据,并在每次向数据库中添加内容时(在$. AJAX 到submit_to_db.php之后)刷新main.php(通过draw_polygon更明显)。
所以基本上我有一个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 。所以我的问题是:异步实际上是如何工作的?有没有其他的解决方法来代替使用getJSON
调用函数get_from_db
(它不是同步的,是吗?这就是为什么它不在函数中时不更新页面的原因吗?)一直都是这样--就像$.ajax
和async: false
(顺便说一句,我无法让它工作)。我的方法是工作,但我想也许有其他更好的方法来做到这一点。我想学习如何。
为了更清楚地说明这一点,下面是我想要实现的目标:
1.页面的@start
,从数据库获取数据(当前通过getJSON
)
1.使用data
在canvas
中绘画或绘图
1.当我单击完成按钮时,它将更新数据库
1.我想自动获得数据再次重画的变化画布。
4条答案
按热度按时间zour9fqk1#
由于$.getJSON()使用 AJAX 配置,因此只需设置全局ajax配置:
qq24tv8q2#
异步并不意味着请求在后台运行,并在收到响应时回调您的函数。如果您希望获得结果,但允许在请求中使用您的应用,则此方法是最佳方法。如果您希望获得直接响应,请查看同步请求。此请求将暂停脚本执行,直到收到响应为止。并且用户在收到响应之前无法执行任何操作。您可以通过以下方式切换它:
例如:
qxsslcnc3#
$.getJSON()不接受配置,正如文档中所述,它是以下内容的简写版本:
因此,只要按照这个规则重写请求,async:false就会按预期工作。
xoefb8l84#
$.getJSON()
是$.ajax()
的简写,可以将其配置为同步(请参见jQuery.getJSON和JQuery.ajax):不过要尽量避免同步调用。引自jQuery doc (see async prop):
跨域请求和dataType:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。
您可能希望尝试jQuery Deferreds,如下所示: