gpt4 book ai didi

javascript - 用 return 在函数中包装 jquery ajax

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:28:17 24 4
gpt4 key购买 nike

我正在尝试使我的一些 javascript 更易于测试,作为其中的一部分,我将某些功能包装在类中,以便我可以在测试中模拟它。

无论如何,我正在尝试结束我的 ajax,所以就我的应用程序而言,它正在请求一个对象的服务。在内部,它会发出一个 ajax 请求,然后对数据做一些处理,然后返回它。

那么像下面的例子这样的事情是可能的吗? (我现在在路上,所以不能亲自尝试)

function SomeAjaxService(webServiceUrl)
{
this.getSomeModel = function(someUniqueId){
var ajaxOptions = {
url: webServiceUrl,
data: {id : someUniqueId},
Success: function(data) { return new SomeModel(data); }
};
$.ajax(ajaxOptions);
};
}

var ajaxService = new SomeAjaxService("http://someurl");
var myModel = ajaxService.getSomeModel(1);

由于 ajax 本质上是异步的,我认为您可以将其设置为同步,但我只是想检查选项是什么...

最佳答案

将其设置为同步是一个坏主意,因为您将锁定 javascript(甚至是浏览器)直到请求返回。您的代码将无法正常工作,因为成功函数是从与您的直接 getSomeModel 方法调用不同的上下文调用的。最好的方法是调用 getSomeModel 并向其传递一个回调函数,该函数将在收到模型时执行。

function SomeAjaxService(webServiceUrl)
{
this.getSomeModel = function(someUniqueId, callback){
var ajaxOptions = {
url: webServiceUrl,
data: {id : someUniqueId},
// calls the callback you passed
Success: function(data) { callback(new SomeModel(data)); }
};
// this is asynchronous and doesn't return anything
$.ajax(ajaxOptions);
};
}

var ajaxService = new SomeAjaxService("http://someurl");
// your callback down here
var myModel;
ajaxService.getSomeModel(1, function(model) {
myModel = model;
// do something with model
});

关于javascript - 用 return 在函数中包装 jquery ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6556550/

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