jQuery mobile:等到$ .getJSON完成

时间:2013-08-29 04:58:02

标签: jquery json jquery-mobile asynchronous jquery-callback

我想用$.getJSON调用填充表:

$.getJSON("localhost/url",
function (data) {
    $.each(data.reporting_list.reporting, function (i, item) {
        rows = '<tr><td>' + item.data1 + '</td><td>' + item.data2 + '</td></tr>'
    });
    $('#aaa').append(rows);
});

填充之后我想发布一些页面更改:

$.mobile.changePage("#homePage");

但是页面在$.getJSON完成之前发生了变化 我想在$.getJSON完成后才更改页面,而是显示ajaxloader。

3 个答案:

答案 0 :(得分:7)

待办事项

$.getJSON("localhost/url", function (data) {
    $.each(data.reporting_list.reporting, function (i, item) {
        rows = '<tr><td>' + item.data1 + '</td><td>' + item.data2 + '</td></tr>'
    });
    $('#aaa').append(rows);
    //move to the page in the callback itself
    $.mobile.changePage("#homePage");    
});

答案 1 :(得分:4)

虽然Arun P Johny已经给出了答案,但我只想更清楚地说明,在jQuery中正确使用$.get()方法

根据http://api.jquery.com/jQuery.get/#jQuery-get1 $.get()方法实际上是

jQuery.get( url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ] )

两个块即datasuccess只会在请求完成时调用,因此您可以在任一块中调用此函数$.mobile.changePage("#homePage");

即。在function (data) { }块中,如Arun P Johny建议的那样,或者您可以在下面的任何其他回调中调用它。

var jqxhr = $.get("example.php", function() {
  alert("success");
})
.done(function() { alert("second success"); })
.fail(function() { alert("error"); })
.always(function() { alert("finished"); });

$.ajax()一样,上述回调分别作为success errorcomplete

希望这有帮助

答案 2 :(得分:2)

ajaxcall(function(){ $.mobile.changePage("#homePage");});

function ajaxcall(callback){
$.getJSON("localhost/url", function (data) {
    $.each(data.reporting_list.reporting, function (i, item) {
        rows = '<tr><td>' + item.data1 + '</td><td>' + item.data2 + '</td></tr>'
    });
    $('#aaa').append(rows);
    //move to the page in the callback itself
    callback();
});

同样使用回调功能,您也可以尝试这种方式