Javascript函数返回未定义的而不是对象
我是一名试图处理JavaScript的Perl程序员。尝试发出AJAX请求,但函数始终返回Javascript函数返回未定义的而不是对象,javascript,return,undefined,Javascript,Return,Undefined,我是一名试图处理JavaScript的Perl程序员。尝试发出AJAX请求,但函数始终返回未定义的。这个代码有什么问题?如何让它正常工作 var url = 'http://local.com/cgi-bin/hello2.pl'; var params = 'a=b&c=d'; // url returns a plain text: // 1234567890 2013 05 May Friday 13 23 45 01 var enddate = getEndDate(url,
未定义的。这个代码有什么问题?如何让它正常工作
var url = 'http://local.com/cgi-bin/hello2.pl';
var params = 'a=b&c=d';
// url returns a plain text:
// 1234567890 2013 05 May Friday 13 23 45 01
var enddate = getEndDate(url, params);
var dow = enddate.EDDAYOW; // must be a 'Friday' but returns undefined
alert(dow);
function getEndDate(url, params) {
var myRequest = new ajaxObject(url);
myRequest.callback = function(responseText) {
if (responseText.length > 20) {
var n = responseText.split(" ");
return {
'edseconds': n[0],
'EDYEAR': n[1],
'EDMON': n[2],
'EDMONNAME': n[3],
'EDDAYOW': n[4],
'EDDAY': n[5],
'EDHOUR': n[6],
'EDMIN': n[7],
'EDSEC': n[8]
};
} else {
getEndDate(url, params);
}
}
myRequest.update(params);
}
function ajaxObject(url, callbackFunction) {
var that = this;
this.updating = false;
this.abort = function() {
if (that.updating) {
that.updating = false;
that.AJAX.abort();
that.AJAX = null;
}
}
this.update = function(passData, postMethod) {
if (that.updating) {
return false;
}
that.AJAX = null;
if (window.XMLHttpRequest) {
that.AJAX = new XMLHttpRequest();
} else {
that.AJAX = new ActiveXObject("Microsoft.XMLHTTP");
}
if (that.AJAX == null) {
return false;
} else {
that.AJAX.onreadystatechange = function() {
if (that.AJAX.readyState == 4) {
that.updating = false;
that.callback(that.AJAX.responseText, that.AJAX.status, that.AJAX.responseXML);
that.AJAX = null;
}
}
that.updating = new Date();
if (/post/i.test(postMethod)) {
var uri = urlCall + '?' + that.updating.getTime();
that.AJAX.open("POST", uri, true);
that.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
that.AJAX.setRequestHeader("Content-Length", passData.length);
that.AJAX.send(passData);
} else {
var uri = urlCall + '?' + passData + '&timestamp=' + (that.updating.getTime());
that.AJAX.open("GET", uri, true);
that.AJAX.send(null);
}
return true;
}
}
var urlCall = url;
this.callback = callbackFunction ||
function() {};
}
除了上面提到的异步内容和返回内容之外,我假设您正在尝试使用服务器时间戳同步某些内容。您只需要millis并使用javascript日期对象来完成其余的工作
如果服务器响应速度不快,或者某个答案>20个字符,这也是一个无限循环,在堆栈溢出一段时间后会导致浏览器崩溃。欢迎来到奇妙的异步世界!Ajax请求是异步的,javascript作为一个整体主要是事件驱动的。您需要更改代码的结构,可能需要向getEndDate
函数添加回调。琐事,Ajax中的A实际上代表异步。您的getEndDate()
没有return
语句,因此它隐式返回未定义的。(您编写的return
语句位于作为回调函数的匿名函数中,因此它从该函数返回并被忽略,而不是从getEndDate()
返回)感谢您的澄清。我很感激。如果responseText.length<20
,请帮助我使此代码正常工作并返回该对象并继续发出请求。我是一个JS新手。