Hướng dẫn return not working javascript - javascript trở lại không hoạt động

Tôi có một vấn đề khi trả về một biến trong hàm của mình, tập lệnh dưới đây hoạt động tốt:

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            alert(status);
        });
    });
}

sessionStatus();

Đặt cược khi tôi thử những điều sau đây, tôi nhận được một hộp tin nhắn với thông báo "không xác định":

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            return status;
        });
    });
}
alert(sessionStatus());

Điều này thực sự làm tôi khó chịu, tôi dường như không thể thấy những gì tôi đã làm sai.

Đã hỏi ngày 13 tháng 11 năm 2009 lúc 23:09Nov 13, 2009 at 23:09

Hướng dẫn return not working javascript - javascript trở lại không hoạt động

Có hai điều bạn nên biết:

1: Điều JSON không đồng bộ, vì vậy việc gọi chức năng đến SessionStatus đã có thể được thực hiện khi JSON vẫn đang được tìm nạp. Điều sau đây sẽ hoạt động:

function sessionStatus(callback){
    $(document).ready(function(){
        $.getJSON(scriptRoot + "sessionStatus.php", function(status){
                callback(status);
        });
    });
}
sessionStatus(function(s){alert(s);});

hay đúng hơn:

function sessionStatus(callback){
    $(document).ready(function(){
        $.getJSON(scriptRoot + "sessionStatus.php", callback);
    });
}
sessionStatus(function(s){alert(s);});

2: Ngay cả khi nó sẽ đồng bộ, bạn chỉ đưa ra giá trị trả lại từ hàm bên trong, vì vậy sessionStatus sẽ không trả về không. Kiểm tra mã này (không liên quan đến điều JSON của bạn):

function do() {
    var x = 0;
    (function(){
       x = 2;
    })();
    return x;
}

or:

function do() {
    var x = (function(){
       return 2;
    })();
    return x;
}

Cả hai trở lại 2. Hy vọng điều này giải thích một chút.

Đã trả lời ngày 13 tháng 11 năm 2009 lúc 23:25Nov 13, 2009 at 23:25

0

Chức năng của bạn sessionStatus() không trả lại bất cứ điều gì, do đó cảnh báo nói undefined.

Tất cả các chức năng thực hiện là thiết lập mọi thứ cho cuộc gọi AJAX xảy ra khi tải trang - không có gì thực sự xảy ra trong sessionStatus() có thể được trả về.

Mã trong

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            return status;
        });
    });
}
alert(sessionStatus());
0 không được chạy cho đến khi cuộc gọi AJAX đến máy chủ trả về một giá trị và cuộc gọi AJAX không được gửi cho đến khi tải trang.

Bạn nên đọc lên những gì

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            return status;
        });
    });
}
alert(sessionStatus());
1 và
function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            return status;
        });
    });
}
alert(sessionStatus());
2 thực sự làm, bởi vì bạn sẽ tiếp tục có được hành vi khó hiểu cho đến khi bạn hiểu chúng đúng cách.

Đã trả lời ngày 13 tháng 11 năm 2009 lúc 23:14Nov 13, 2009 at 23:14

RichiehindlerichiehindleRichieHindle

264K46 Huy hiệu vàng354 Huy hiệu bạc395 Huy hiệu Đồng46 gold badges354 silver badges395 bronze badges

3

Hàm sessionStatus () của bạn không bao giờ trả về bất cứ điều gì. Nó đặt một hàm để chạy sau và chức năng đó trả về một cái gì đó, nhưng đó không phải là bất cứ điều gì để làm với sessionStatus ()

Đã trả lời ngày 13 tháng 11 năm 2009 lúc 23:15Nov 13, 2009 at 23:15

GarethgarethGareth

128K36 Huy hiệu vàng147 Huy hiệu bạc155 Huy hiệu Đồng36 gold badges147 silver badges155 bronze badges

Bạn đang trả lại một giá trị khi sự kiện sẵn sàng tài liệu đã hoàn thành. Giá trị của bạn phải đi đâu? Đối tượng jQuery không biết phải làm gì với nó.

Đã trả lời ngày 13 tháng 11 năm 2009 lúc 23:15Nov 13, 2009 at 23:15

GarethgarethFrank DeRosa

128K36 Huy hiệu vàng147 Huy hiệu bạc155 Huy hiệu Đồng2 gold badges14 silver badges12 bronze badges

Bạn đang trả lại một giá trị khi sự kiện sẵn sàng tài liệu đã hoàn thành. Giá trị của bạn phải đi đâu? Đối tượng jQuery không biết phải làm gì với nó.

Frank Derosafrank Derosa

2.2412 Huy hiệu vàng14 Huy hiệu bạc12 Huy hiệu đồngNov 13, 2009 at 23:18

Hàm sessionStatus chỉ cần thiết lập trình nghe sự kiện cho $ (tài liệu) .reetread () và sau đó trả về mà không trả lại giá trị. Đó là điều không xác định mà bạn thấy.Gareth Simpson

Sau này khi $ (tài liệu) .reet () bắn nó gọi Ajax mà nếu nó thành công trả về trạng thái, nhưng không có gì nhận được trạng thái đó.12 gold badges46 silver badges49 bronze badges

function sessionStatusCallback(status)
{
    alert(status);
}

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
                sessionStatusCallback(status);
        });
    });
}

sessionStatus();

Đã trả lời ngày 13 tháng 11 năm 2009 lúc 23:18

Gareth Simpsongareth Simpson

2.2412 Huy hiệu vàng14 Huy hiệu bạc12 Huy hiệu đồngNov 13, 2009 at 23:18

Hàm sessionStatus chỉ cần thiết lập trình nghe sự kiện cho $ (tài liệu) .reetread () và sau đó trả về mà không trả lại giá trị. Đó là điều không xác định mà bạn thấy.Ben Regenspan

Sau này khi $ (tài liệu) .reet () bắn nó gọi Ajax mà nếu nó thành công trả về trạng thái, nhưng không có gì nhận được trạng thái đó.2 gold badges32 silver badges44 bronze badges

Đã trả lời ngày 13 tháng 11 năm 2009 lúc 23:18

Gareth Simpsongareth SimpsonNov 13, 2009 at 23:24