jquery getJSON同步

hxzsmxv2  于 2023-01-01  发布在  jQuery
关注(0)|答案(4)|浏览(119)

目标:我所追求的是从数据库中获取数据,并在每次向数据库中添加内容时(在$. 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(它不是同步的,是吗?这就是为什么它不在函数中时不更新页面的原因吗?)一直都是这样--就像$.ajaxasync: false(顺便说一句,我无法让它工作)。我的方法是工作,但我想也许有其他更好的方法来做到这一点。我想学习如何。
为了更清楚地说明这一点,下面是我想要实现的目标:
1.页面的@start,从数据库获取数据(当前通过getJSON
1.使用datacanvas中绘画或绘图
1.当我单击完成按钮时,它将更新数据库
1.我想自动获得数据再次重画的变化画布。

zour9fqk

zour9fqk1#

由于$.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
});
qq24tv8q

qq24tv8q2#

异步并不意味着请求在后台运行,并在收到响应时回调您的函数。如果您希望获得结果,但允许在请求中使用您的应用,则此方法是最佳方法。如果您希望获得直接响应,请查看同步请求。此请求将暂停脚本执行,直到收到响应为止。并且用户在收到响应之前无法执行任何操作。您可以通过以下方式切换它:

async: false,

例如:

$.ajax({
    url: "myurl",
    async: false,
    ...
})
qxsslcnc

qxsslcnc3#

$.getJSON()不接受配置,正如文档中所述,它是以下内容的简写版本:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

因此,只要按照这个规则重写请求,async:false就会按预期工作。

xoefb8l8

xoefb8l84#

$.getJSON()$.ajax()的简写,可以将其配置为同步(请参见jQuery.getJSONJQuery.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);
});

相关问题