gpt4 book ai didi

javascript - 如何使用 JavaScript 类中的属性和方法来交换数据?

转载 作者:行者123 更新时间:2023-11-30 18:12:28 24 4
gpt4 key购买 nike

我在 JavaScript 对象(类)的方法之间交换数据有一个小问题:

var TEST = (function () {

var TEST = function() {

};

TEST.prototype.get = function() {
$.ajax({
type: "GET",
url: "http://test.com/getall",
dataType: "json",
success: function (data) {
return data; // if i console log this i will get a json obj
}
});
};

TEST.prototype.parse = function(data) {
$.each(this.get(), function(k, v){
console.log(v);
});
};

return TEST;
})();

所以我试图在另一个方法的每个语句中调用一个方法。问题是

响应是未定义

我也试过,结果一样

var testing = new TEST();
var get = testing.get();
testing.parse(get);

我错过了什么?我如何从 this.get 返回数据以在 this.parse 中使用。

谢谢

最佳答案

$.ajax() 默认是异步的。这意味着,函数 get() 的执行不会等到请求完成。因此你没有从它返回任何值,这导致 undefined 被返回。

为了让您的 get() 函数能够返回一个值,您必须以同步方式执行请求并在外部函数中设置一个变量(因为成功本身就是只是另一个函数,其返回值未被捕获):

TEST.prototype.get = function() {
var result;

$.ajax({
type: "GET",
url: "http://test.com/getall",
async: false, // this is the important part!
dataType: "json",
success: function (data) {
result = data;
}
});

return result;
};

编辑

如@pebbl 所述,这将停止所有脚本的执行,直到请求完成。因此,您的整个页面将暂时被阻止。

一般的方法是在这种情况下使用回调,一旦请求完成就会执行回调。所以在你的情况下是这样的:

TEST.prototype.get = function( cb ) {
$.ajax({
type: "GET",
url: "http://test.com/getall",
dataType: "json",
success: function (data) {
cb( data );
}
});
};

稍后像这样调用:

var testing = new TEST();
testing.get( function( data ) {
testing.parse( data );
});

关于javascript - 如何使用 JavaScript 类中的属性和方法来交换数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14253788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com