簡體   English   中英

無法在JavaScript返回中訪問json對象

[英]Unable to access json object in javascript return

當我嘗試獲取Ajax調用返回的json類型數據時,我將未定義為return。

function AjaxCallToGetData(){
    var chartDataCheckin;
    var checkin_location = $("#select_checkin_location").val();
    jQuery.ajax({
        'url': '<?php echo $this->modurl; ?>dashboard/checkinchart',
        dataType: 'json',
        data: {checkin_location: checkin_location},
        'type': 'POST',
        success: function(data) {
            alert(data);     // alerts object  

            return data;
        }
    });

}
function getcheckinchart(DataCheckin) {
    alert('hi');
    var chartDataCheckin = AjaxCallToGetData();
    alert(chartDataCheckin); // this doesnot
    }

請幫忙

    var testobj;
function AjaxCallToGetData(){
        var chartDataCheckin;
        var checkin_location = $("#select_checkin_location").val();
        jQuery.ajax({
            'url': '<?php echo $this->modurl; ?>dashboard/checkinchart',
            dataType: 'json',
            data: {checkin_location: checkin_location},
            'type': 'POST',
            success: function(data) {
                alert(data);     // alerts object  

               testobj=data;
            }
        });

    }
    function getcheckinchart(DataCheckin) {
        alert('hi');
         AjaxCallToGetData();
        alert(testobj); 
        }

這將起作用:)干杯

您正在從異步調用中獲取數據到服務器,但是期望以同步方式返回。 使用全局變量或使用延期對象或承諾: https : //api.jquery.com/category/deferred-object/

您的return語句位於(異步)AJAX操作的成功回調中,因此它不會作為AjaxCallToGetData()的結果返回。

解決方案:

在成功回調中進行處理或創建自己的回調。 我本人不喜歡動態回調,因此我提供了一個基本示例,其中我將回調函數作為參數傳遞。

function AjaxCallToGetData(callback){
    var chartDataCheckin;
    var checkin_location = $("#select_checkin_location").val();
    jQuery.ajax({
        url: '<?php echo $this->modurl; ?>dashboard/checkinchart',
        dataType: 'json',
        data: {checkin_location: checkin_location},
        type: 'POST',
        success: function(data) {
            // Either process the data here or:
            if (jQuery.isFunction(callback)) callback(data);
        }
    });
}

function getcheckinchart(DataCheckin) {
    // Notice we're passing the callback function as a parameter
    AjaxCallToGetData(processcheckinchart);
}

function processcheckinchart(data) {
    alert(data);     // alerts object
}

ajax調用是異步的,因此當您在getcheckinchart發出警報時,數據仍不存在。 這應該工作。

 function AjaxCallToGetData(callback){
        var chartDataCheckin;
        var checkin_location = $("#select_checkin_location").val();
        jQuery.ajax({
            'url': '<?php echo $this->modurl; ?>dashboard/checkinchart',
            dataType: 'json',
            data: {checkin_location: checkin_location},
            'type': 'POST',
            success: function(data) {
                alert(data);     // alerts object  

                callback(null,data);
            }
        });

    }
    function getcheckinchart(DataCheckin) {
        alert('hi');
        AjaxCallToGetData(function(err,charDataCheckin){
            alert(chartDataCheckin); 
        });
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM