如何在ajax调用成功后将数据返回到变量

时间:2015-11-12 19:11:16

标签: javascript php jquery ajax

我有一个PHP文件将所需数组格式的数据返回给我的FlotChart,它正在运行。 现在我正在尝试使用ajax在我的脚本中获得此结果,但是我无法在全局变量上看到结果,如下所述:

myJS.js   
var EcomDashboard = function() {
    return {
        init: function() {

        var dataEarnings = NULL;

        $.ajax({
            url:"operation.php",
            dataType: "text",  
            success:function(data) {
                alert(data); //show my array [ [1, 20],[2,30],[3,14] ] 
                dataEarnings = data;
            }
        });

        alert(dataEarnings); //showing "NULL" but I need [ [1, 20],[2,30],[3,14] ]

        ...

分配给我的变量日期的正确方法是什么?获得数组[[1,20],[2.30],[3.14]]?

3 个答案:

答案 0 :(得分:2)

Javascript是一种异步语言,这意味着它不会等待http请求完成执行下一行。您必须在success块内分配变量。 alert显示null是因为在$ .ajax http请求行完成之前执行了。

可能是你可以使用回调来做到这一点:

dataAccess.js    
var ecomDashboard = function() {

            init: function(callback) {

            var dataEarnings = NULL;

            $.ajax({
                url:"operation.php",
                dataType: "text",  
                success:function(data) {
                    callback(data);
                }
            });
         }
    }

controller.js
    ecomDashboard.init(function(data){
          // data contains the array result
        // do your stuff

    })

事件更好: 从jquery 1.5开始,有一个promise接口,而.success将被弃用。编辑:感谢Kevin B

所以承诺:

    dataAccess.js    
    var ecomDashboard = function() {

                init: function(callback) {

                var dataEarnings = NULL;

                return $.ajax({
                    url:"operation.php",
                    dataType: "text"
                });
             }
        }

    controller.js
        ecomDashboard.init().done(function(data){
//do your stuff
alert(data);
}).fail(function(error){
//do stuff when error
});

答案 1 :(得分:1)

$.ajax({
  url:"operation.php",
  dataType: "text",  
  success:function(data) {        
    doSomthingOnComplete(data);
  }
});

function doSomthingOnComplete(data)
{
  // do here your work
}

答案 2 :(得分:0)

这是因为在您的ajax请求结算之前alert(dataEarnings)正在执行。 AJAX首字母缩写词中的第一个字母是Asynchronous。因此,最终您的数据设置正确,您只是在异步调用完成之前尝试访问它。