无法在javascript返回中访问json对象

时间:2015-06-10 08:59:43

标签: javascript ajax json

当我试图获取json类型数据以返回ajax调用时,我将未定义为返回。

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
    }

请帮忙

4 个答案:

答案 0 :(得分:1)

    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); 
        }

这将有效:)干杯

答案 1 :(得分:0)

您正在从异步调用中获取数据到服务器,但您希望以同步方式返回。使用全局变量或使用延迟对象或承诺:https://api.jquery.com/category/deferred-object/

答案 2 :(得分:0)

您的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
}

答案 3 :(得分:0)

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); 
        });
        }
相关问题