2013-10-31 37 views
0

我有一个问题,导致下拉和浏览器锁定,直到ajax请求服务。我知道ASYNC应该为JSON Ajax请求设置为False,所以我很感激有人能够帮助我修改代码,以防止在收到Ajax请求之前锁定下拉和页面。如何通过ajax请求加载JSON时停止锁定浏览器?

您可以点击此处查看:

http://bit.ly/16QN1lA

我已经添加了5秒。睡到data.php文件使问题更加明显。

+0

为什么它必须被设置为false?实际上,jQuery的这个特性已被废弃:http://stackoverflow.com/questions/11448011/jquery-ajax-methods-async-option-deprecated-what-now –

+0

如果我将它设置为true,我会收到此消息: 未捕获的SyntaxError:意外的标记ü 下面是与异步相同的页面设置为true http://bit.ly/1aJRYiC –

+0

@musical_coder据现场,'异步:FALSE'使用时才弃用推迟jqXHR的API。如果您使用的是旧回调而不是承诺,那么您可以继续在jQuery中使用同步AJAX。 –

回答

0

你得到与异步AJAX错误的原因是该函数立即返回,这是很好,你从服务器得到的响应之前。所以你打电话给JSON.parse()垃圾数据,这是导致你看到的错误。

的解决方案是使解析发生你从服务器的响应:

if(year !=""){ 
    //Get vehicle json and store into vehicles_json 
    getJson(
     js_base_url, 
     function(makes_json) { 
      //Set makes equal to makes dropdown 
      var makes = $("#make"); 
      //empty dropdown 
      makes.empty(); 

      var makes_array = []; 
      //loop through makes_json json 
      $.each(makes_json, function() { 
        makes_array.push('<option value="', this.model_make_display, '">', this.model_make_display, '</option>'); 
      }); 
      makes.html(makes_array.join('')); 
     } 
    ); 
} 

function getJson(url, callBack) { 
    $.ajax({ 
    type: 'GET', 
    url: url, 
    dataType: 'json', 
    global: false, 
    success: function(json_response) { 
     callBack(json_response); 
    } 
}); 
} 
+0

这有效,但这种方式,我将不得不为每个看起来不错的功能。任何方式返回一个数组,而不是在函数本身循环? –

+0

不,因为正如我上面所说的,在从服务器获得响应之前,您不能从函数返回。不确定你的意思是“不好看”;你的意思是你不想重复'ajax()'调用?在这种情况下,使它只能从一个函数中调用'ajax()',并将其传递给你的回调函数。更改我的代码以显示在这种情况下如何执行此操作。 –

0

让我只是建议一个不同的方法来做到这一点。

$.get(url, function(res){ 
data = JSON.parse(res); 
$(data).each(function(k,v){ 
    $('#makes').append(html) 
} 
} 
0

我决定使用jQuery的$ .getJSON,它的工作不锁定浏览器。

$.getJSON("test.php", function(json) { 
    console.log("JSON Data: " + json); 
}); 

http://api.jquery.com/jQuery.getJSON/

相关问题