2011-06-03 47 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