2013-05-12 120 views
0

我是一個嘗試處理JavaScript的Perl編碼器。嘗試創建AJAX請求但功能始終返回undefined。這段代碼有什麼問題?如何讓它正常工作?Javascript函數返回undefined而不是對象

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() {}; 
} 
+2

歡迎來到** async **的美妙世界!你不能那樣做。 – SLaks 2013-05-12 21:13:44

+0

Ajax請求是異步的,而javascript作爲一個整體主要是事件驅動的。您將要更改代碼的結構,可能會向'getEndDate'函數添加回調。瑣事,Ajax中的** A **實際上代表異步。 – 2013-05-12 21:18:26

+0

您的'getEndDate()'沒有'return'語句,所以它隱含地返回'undefined'。 (你編寫的'return'語句在回調的匿名函數中,所以它從_that_函數返回並被忽略,它不會從'getEndDate()'返回。) – nnnnnn 2013-05-12 21:20:29

回答

0

除了異步的東西,上面我提到會認爲你想與同步服務器一個時間戳東西回報的東西。您只需要millis並使用javascript日期對象來完成剩下的工作。

如果服務器沒有響應速度快或者某種回答大於20個字符,這也是一個無限循環,導致瀏覽器在堆棧溢出後崩潰。