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 :(得分: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。
答案 1 :(得分:2)
您的问题出在:
Q.getData = function(Q.file) {
function(
之后的部分是形式参数列表,只能包含有效的标识符。他们不能包含'。'字符。
答案 2 :(得分: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
将包含您的数据;
此外,由于此函数不返回任何值,因此您必须将警报放入回调中。
答案 3 :(得分:1)
您:
Q.getData = function(Q.file) {
无效,您可以在此处定义命名参数,而不是传递它们的位置。
答案 4 :(得分:0)
您不能将对象属性用作函数参数:Q.getData = function(Q.file){
。在这种情况下,根本不需要参数,因为你可以从getData
函数中读取Q.file。
您的警报返回未定义的原因是您正在进行异步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