2011-06-03 70 views
0

Q.js文件對象字面不確定

Q = {}; 

Q.stringFile = []; 
Q.file = "CSS.txt"; 

Q.getData = function(Q.file){ 
    $.get(Q.file, function(data){ 
     var str = data; 
     Q.stringFile = str.split("\n"); 

     return Q.stringFile; 
    }); 
} 

a.html文件

<head> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script> 
    <script type="text/javascript" src="Q.js"></script> 
    <script type="text/javascript"> 
     var d = Q.getData(Q.file); 
     alert(d); 
    </script> 

</head> 

<body> 

</body> 
</html> 

警報沒有做輸出!

錯誤:Q未定義; 意外令牌。

我該如何解決這個問題?

+0

無法從Ajax調用返回的數據。 – 2011-06-03 10:29:41

+0

[jQuery:ajax調用成功後返回數據]的可能重複(http://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success) – 2011-06-03 10:29:58

+0

爲什麼不?爲什麼Q是未定義的?好像html看不到Q對象... – DrStrangeLove 2011-06-03 10:32:11

回答

2

正如我在我的評論中所說的,您不能從Ajax調用返回數據,因爲Ajax調用是異步的。你必須讓你的函數接受一個回調,如:

Q.getData = function(file, callback){ 
    $.get(file, function(data){ 
     var stringFile = data.split("\n"); 
     callback(stringFile); 
    }); 
}; 

,然後用調用它:

Q.getData(Q.file, function(d) { 
    alert(d); 
}); 

關於錯誤:你在這一行有一個語法錯誤

Q.getData = function(Q.file) 

Q.file在此處無效。瀏覽器無法解析和處理該文件,因此Q將不會被定義。


我有這樣的印象,你應該先行read some tutorial然後再繼續。

+0

但爲什麼Q未定義? html沒有看到Q.js文件? – DrStrangeLove 2011-06-03 10:48:22

+0

由於此語法錯誤。如果刪除它,將定義「Q」。由於您遇到此錯誤,瀏覽器無法正確解析文件。 – 2011-06-03 10:52:33

+0

非常感謝!我不知道關於點形式參數規則和不可退回的ajax異步調用..我現在學到了..謝謝! – DrStrangeLove 2011-06-03 11:09:50

1

我認爲這個問題是與方法的定義:

Q.getData = function() { 
    var that = this; 
    $.get(that.file, function(data){ 
     var str = data; 
     that.stringFile = str.split("\n"); 

     // below return has no purpose in an async request 
     // return Q.stringFile; 

     alert(that.stringFile); 
    }); 
} 

運行Q.getData();Q.stringFile將包含您的數據之後;

此外,因爲此函數不返回任何值,你必須把你的警報在回調。

1

您:

Q.getData = function(Q.file) { 

是無效的,這就是你定義命名參數不是你通過他們。

2

你的問題是:

Q.getData = function(Q.file) { 

function(後面的部分是一個正式的參數列表只能包含有效的標識符。他們不能包含'。'字符。

0

不能使用對象屬性作爲函數參數:Q.getData = function(Q.file){。在這種情況下,根本不需要參數,因爲您可以從getData函數中讀取Q.file。

你的警報返回undefined的原因是你正在進行異步AJAX調用,它不會返回任何東西,所以d 未定義。如果您想從AJAX呼叫返回某些內容,則需要進行同步呼叫。然而

一個更好的解決辦法是使用一個成功處理程序:

var Q = {}; // Without the var it is an implied global. In this case you look like you want a global, but it's still good form to explicitly define it in the global namespace. 

Q.stringFile = []; 
Q.file = "CSS.txt"; 

Q.getData = function() { 
    $.get(Q.file, function(data) { 
     var str = data; 
     Q.stringFile = str.split("\n"); 

     return Q.stringFile; 
    }).success(function (d) { // This fires once the data has arrived 
     alert(d); 
    }); 
}; // you should have a ; here