【问题标题】:Waiting for JSON data to be parsed等待解析 JSON 数据
【发布时间】:2009-06-14 17:39:53
【问题描述】:

有没有办法等待jQuery的getJSON方法?

我想解析使用此函数接收的数据,如果包含特定字符串,则只返回 false/true。但是由于异步数据处理,这似乎并不那么容易。这是一个代码sn-p:

contained = false;

$.getJSON(URL, function ( data ) {
    $.each( data, function( i, item ) {
        if ( item.Info.code == code ) contained = true;
    });
});

在这段代码之后,这个代码所在的函数返回'contained'值,whis基本上是假的,因为getJSON还没有完成。

【问题讨论】:

    标签: jquery json callback wait


    【解决方案1】:

    正确的解决方案是不使其同步(这是可能的,但不建议这样做)。它正在适当地使用回调。异步编程需要习惯,但这是值得的。

    代替:

    function foo()
    {
      ...
    
      contained = false;
    
     $.getJSON(URL, function ( data ) {
          $.each( data, function( i, item ) {
              if ( item.Info.code == code ) contained = true;
          });
      });
    
      // Do something with contained
    }
    

    做:

    function getContained(containedCallback)
    {
      $.getJSON(URL, function(data)
      {
        var contained = false;
        $.each( data, function( i, item ) {
            if ( item.Info.code == code ) contained = true;
        });
        containedCallback(contained);
      }
      );
    }
    
    function foo()
    {
      ...
      getContained(function(contained)
      {
         // Do something with contained
      });
    }
    

    【讨论】:

    • 哇,我以前从未见过这样使用 JavaScript。我喜欢这个问题只是为了这个答案。
    【解决方案2】:

    你可以尝试做一个同步请求,像这样:

     $.ajax({
          type: "GET",
          url: "www.foo.com",
          data: data
          async: false,
          dataType: "json"
      });
    

    【讨论】:

    • 比我快几秒 +1
    【解决方案3】:

    感谢您的回答。我只是将进程设置为同步:

    $.ajaxSetup({'async': false});
    

    之后,使用了我的代码。工作得很好!

    更多 jQuery Ajax 选项here

    【讨论】:

    • 感谢您的提示,我需要快速修复,在这种情况下异步不会给我任何额外的性能。
    猜你喜欢
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2023-01-14
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多