jQuery - 在函数外部调用函数定义变量

时间:2013-12-07 12:33:28

标签: jquery function variables call

我有这种情况:

$(document).ready(function(){
    $("#username-field").keyup(function(event) {
    data = [];
    data.push( $(this).val() );
        $.ajax({
            url: 'checkUsername.php',
            data: {data:JSON.stringify(data)},
            type: 'POST',
            dataType: "json",
            success: function (data) {
                var text = (data.error ? data.error : "");
            }
        });
    });
}); 

我需要在此函数之外调用此变量,例如:

$(document).ready(function(){
    $("#username-field").keyup(function(event) {
    data = [];
    data.push( $(this).val() );
        $.ajax({
            url: 'checkUsername.php',
            data: {data:JSON.stringify(data)},
            type: 'POST',
            dataType: "json",
            success: function (data) {
                var text = (data.error ? data.error : "");
            }
        });
            alert ( text )  // ADDED <--
    });
}); 

有人知道如何构造这个jQuery,所以我可以稍后调用该变量吗?

3 个答案:

答案 0 :(得分:1)

尝试$.Deferred

$(document).ready(function(){
    $("#username-field").keyup(function(event) {
    var def = $.Deferred(); //Declare

    data = [];
    data.push( $(this).val() );
        $.ajax({
            url: 'checkUsername.php',
            data: {data:JSON.stringify(data)},
            type: 'POST',
            dataType: "json",
            success: function (data) {
                var text = (data.error ? data.error : "");

                def.resolve(text); //Resolve
            }
        });

        def.done(function(text){//Add handler
             alert(text);
        });

    });
}); 

答案 1 :(得分:0)

因为文本是在异步函数中设置的,所以最好使用回调。即一旦接收到并分配了数据,就可以调用另一个函数并在内部执行任何操作。当然,您可以通过定义全局text变量来执行相同的操作,但如果您遵循此方法,则无法确切知道数据何时可用。

$(document).ready(function(){
    $("#username-field").keyup(function(event) {
        data = [];
        data.push( $(this).val() );
        var dataIsHere = function(text) {
            data.push(text);
        }
        $.ajax({
            url: 'checkUsername.php',
            data: {data:JSON.stringify(data)},
            type: 'POST',
            dataType: "json",
            success: function (data) {
                var text = (data.error ? data.error : "");
                dataIsHere(text);
            }
        });
    });
});

答案 2 :(得分:-1)

尝试在document.ready函数之外声明一个全局变量文本,然后在

中分配并使用它
var text = "";
$(document).ready(function(){
$("#username-field").keyup(function(event) {
data = [];
data.push( $(this).val() );
    $.ajax({
        url: 'checkUsername.php',
        data: {data:JSON.stringify(data)},
        type: 'POST',
        dataType: "json",
        success: function (data) {
            text = (data.error ? data.error : "");
        }
    });
        alert ( text )  // ADDED <--
  });
});