getJSON同步

时间:2012-10-22 10:44:03

标签: jquery ajax sync getjson synchronous

目标:我想要的是从数据库获取数据并刷新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(它不是同步的,是吗?这就是为什么它不在页面内时更新页面的原因功能?)所有的时间 - 就像$.ajaxasync: false一样(顺便说一下,我无法让它工作)。我的方法很有效,但我想也许还有其他更好的方法可以做到。我很想学习如何。提前致谢。我希望我有任何意义。

为了让它更清晰,这就是我想要实现的目标:

  1. @start页面,从数据库获取数据(目前通过getJSON
  2. 使用canvas
  3. data中绘画或绘图
  4. 当我点击完成按钮时,它将更新数据库
  5. 我想自动重新获取数据以重新绘制画布中的更改。

4 个答案:

答案 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.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);
});