【问题标题】:Javascript array returns undefinedJavascript数组返回未定义
【发布时间】:2011-11-07 15:40:42
【问题描述】:

我目前正在将 javascript 文件链接到 html 页面,并且在使用该 javascript 文件中的函数时,返回值基本上被删除并显示为未定义,即使在函数本身中定义了值(这可能是非常令人困惑,我将只显示代码,它应该是有意义的):

functions.js

function addActivity(contactNameSelected, username) {   
var returnArray = [];
//post to .php
        if(data.added)
        {
            var newEvent = [];
            newEvent['id'] = data.id;
            newEvent['date'] = formattedDate;
            returnArray.push(true);
            returnArray.push(newEvent);
            return returnArray; //when i debug, this has a value and is a valid array at this point
        }
        else
        {
            returnArray.push(false);
            returnArray.push(data.message); //when i debug, this has a value and is a valid array at this point
            return returnArray;
       }
    }

home.html

var response = [];
response = addActivity(contactNameSelected, username); //although valid above, undefined here
if(response[0]) //error b/c response is undefined
{
    //do stuff if successful 
}
else{
    //do other stuff if unsuccessful
}

如果我只返回一个字符串,它可以正常工作,但由于某种原因,如果我尝试返回一个数组,它只是未定义的。这是为什么呢?

谢谢!

【问题讨论】:

  • returnArray 定义在哪里?
  • “newEvent”变量应该是一个普通对象,而不是一个数组实例,因为您只是将它用作普通对象。
  • 要么缺少 returnArray 的定义,要么您已经剪掉了函数可能(并且在这种情况下)提前返回的部分代码。另外,一个小问题,但var response = []; 是多余的,因为后面的行中的函数应该返回一个新数组。
  • @MischaNix 抱歉,我剪掉了定义 returnArray 的代码部分。关于次要的挑剔,我有它,但改变了它 b/c 我想问题可能是我需要指定即将到来的类型是一个数组。
  • @Pointy 我不确定我是否明白你在说什么。我使用 newEvent 作为关联数组,那个普通对象怎么样?

标签: javascript arrays return return-value undefined


【解决方案1】:

我猜省略的“//post to .php”看起来像

$.post('...php', { ... }, function(data) {
   if (data.added) ...

AJAX 响应由一个异步执行的回调函数 处理。换句话说,returnArrayaddActivity 返回之后就被填充了。

return returnArray; 语句没有用,因为您从 回调 返回一个值,而不是来自 addActivity。回调不是由您的代码调用,而是由 XHR(在不同的执行上下文中)调用,并且它的返回值被丢弃。

要以异步方式正确传回您的数据,我们需要调整您的代码。

function addActivity(contactNameSelected, username, callback) {                           
    $.post('...', { ... }, function(data) {
        var returnArray=[];
        if(data.added)                        
        {                        
            ...
        }                        
        else                        
        {                        
            ...                      
        }
        callback(returnArray);
    });
}

 

addActivity(contactNameSelected, username, function(response) {
    if(response[0])
    {                                
        ...
    }                                
    else
    {                                
        ...
    }
});

【讨论】:

  • 非常感谢!立即解决了问题。忘了它是异步的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多