JavaScript:无法在没有警报的情况下分配值

时间:2012-11-21 09:40:47

标签: jquery json alert assign

我已在.js文件中声明此函数并在.html文件中调用它。

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

上面的函数返回“undefined”而没有“alert”,警告它正常工作。任何人都可以帮助我。

谢谢 提前。

3 个答案:

答案 0 :(得分:4)

此问题已被回答了一千次。它是关于'无法从异步请求中返回任何值'。你应该在valuePage回调中做done所要做的一切。

答案 1 :(得分: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函数,并使用从请求接收的数据调用给定函数。

答案 2 :(得分:1)

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