object literal undefined

时间:2011-06-03 10:26:32

标签: 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;
    });
}

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未定义; 意外的标记 。

我如何解决这个问题?

5 个答案:

答案 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