0

我已经在 .js 文件中声明了这个函数并在 .html 文件中调用它。

function getTotalPages() {
    var valuePage;
    $.getJSON('Data/product.json').
        done(function(data) {
        $.each(data, function(key, value) {
                valuePage=value;
            });
        });
    //alert('out');
    return valuePage;
}

上面的函数返回没有“警报”的“未定义”,带有警报它工作正常。谁可以帮我这个事。

先感谢您。

4

3 回答 3

4

这个问题已经回答了一千次了。这是关于“无法从异步请求中返回任何值”。你想做的所有事情都valuePage应该在done回调中完成。

于 2012-11-21T09:43:37.767 回答
2

它不起作用,因为您的 ajax 请求是异步的。使用警报,您有一个超时,然后返回值。您可以通过添加使您的脚本工作(注意使用您不能发出同步请求async: false 的跨域jsonp请求!)但实际上我不推荐您,因为您的 JS 将阻塞,直到请求准备好。更好的方法是使用回调:

function getTotalPages(callback) {
  var valuePage;
    $.getJSON('Data/product.json').
        done(function(data) {
            $.each(data, function(key, value) {
            if (typeof callback === 'function') {
                callback(value);
            }
        });
    });
}

这是一个如何使用异步请求执行此操作的示例:

function getResult(callback) {
    var url = 'https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=mgechev&count=3';
    $.ajax({
        url: url,
        success: function (data) {
            if (typeof callback === 'function') {
                callback(data);
            }
        },
        dataType: 'jsonp'
    });
}

getResult(function (data) {
    var variable = data;
    alert(variable);
});​

JSFiddle:http: //jsfiddle.net/vWnHJ/

在示例中,我将函数传递getResult给函数并使用从请求中接收到的数据调用给定函数。

于 2012-11-21T09:44:07.217 回答
1

AJAX 是异步的,当您关闭警报消息时,返回的值将被解析,但如果没有警报,则为时过早。您可以发出同步请求或使用回调。

于 2012-11-21T09:43:58.383 回答