0

我有一个问题导致下拉列表和浏览器锁定,直到提供 ajax 请求。我知道 JSON Ajax 请求的 ASYNC 应该设置为 False,所以如果有人可以帮助我修改代码以防止在收到 Ajax 请求之前锁定下拉列表和页面,我将不胜感激。

你可以在这里查看:

http://bit.ly/16QN1lA

我增加了 5 秒。睡眠到 data.php 文件,使问题更加明显。

4

3 回答 3

0

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

$.get(url, function(res){
 data = JSON.parse(res);
 $(data).each(function(k,v){ 
  $('#makes').append( html )
 }
}
于 2013-10-31T22:46:30.783 回答
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);
     }
 });
}
于 2013-10-31T22:55:31.477 回答
0

我决定使用 jQuery $.getJSON 并且它在不锁定浏览器的情况下工作。

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

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

于 2013-11-02T16:56:34.250 回答