Javascript 对象文字未定义

Javascript 对象文字未定义,javascript,Javascript,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; }); } <head> <scr

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;
    });
}
<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>
a.html文件

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;
    });
}
<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>

var d=Q.getData(Q.file);
警戒(d);
警报不输出

错误:未定义Q; 意外标记


如何解决此问题???

我认为问题在于方法定义:

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
将包含您的数据


另外,由于此函数不返回任何值,您必须将警报放入回调中。

我认为问题在于方法定义:

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
将包含您的数据

此外,由于此函数不返回任何值,您必须将警报放入回调中。

您的:

Q.getData = function(Q.file) {
无效,这是定义命名参数的地方,而不是传递它们的地方。

您的:

Q.getData = function(Q.file) {

无效,这是定义命名参数的地方,而不是传递它们的地方。

正如我在评论中所说的,您不能从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



我的印象是,您应该在继续之前先返回数据。

正如我在评论中所说的,您不能从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


我的印象是,在你继续之前,你应该首先考虑。

你的问题在于:

Q.getData = function(Q.file) {
函数(
之后的部分是一个正式的参数列表,只能包含有效的标识符。它们不能包含“.”字符。

您的问题在于:

Q.getData = function(Q.file) {

函数(
后的部分是一个正式的参数列表,只能包含有效的标识符。它们不能包含“.”字符。

不能将对象属性用作函数参数:
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

不能将对象属性用作函数参数:
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

您无法从Ajax调用返回数据。可能重复为什么不?以及为什么Q未定义?html似乎没有看到Q对象…因为Ajax调用是异步的,即在外部函数
getData
返回后,回调将被调用较长时间。您无法从Ajax调用返回数据。可能重复为什么不是??为什么Q是未定义的??似乎html没有看到Q对象……因为Ajax调用是异步的,也就是说,在外部函数
getData
返回后,回调将被调用很久。但是为什么Q是未定义的??html没有看到Q.js文件??因为这个语法错误。如果删除它,将定义
Q
如果出现此错误,浏览器无法正确解析文件。非常感谢!!我不知道dot形式参数规则和不可返回的ajax异步调用..我现在学习..谢谢!!但是为什么Q未定义?html没有看到Q.js文件?因为此语法错误。如果删除它,将定义
Q
。如果出现此错误,浏览器ser无法正确解析文件。非常感谢!!我不知道dot形式参数规则和不可返回的ajax异步调用..我现在学到了..谢谢!!