我有一个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]]?
答案 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。因此,最终您的数据设置正确,您只是在异步调用完成之前尝试访问它。