ajax调用不会从外部JS文件返回数据
ajax call doesnt return the data from external JS file
我正在尝试用JavaScript实现Repository模式。我有ViewModel,当我调用它的initialize方法时,我想用数据初始化它。除了我无法从AJAX调用中返回数据之外,一切似乎都在原地踏步。我可以看到数据是从ajax调用返回的,但当我试图在SomeViewModel的done函数中捕获数据时,它是null。
有人能告诉我哪里出了问题吗?
p.S:请注意,我没有进行异步调用,因此调用链得到了正确维护。
这就是我的存储库的样子:
function SomeRepository(){
this.LoadSomeData = function loadData()
{
$.ajax({
type: "POST",
url: "someUrl",
cache: true,
async: false,
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
//success: handleHtml,
success: function(data) {
alert('data received');
return data;
},
error: ajaxFailed
});
function ajaxFailed(xmlRequest) {
alert(xmlRequest.status + ' 'n'r ' +
xmlRequest.statusText + ''n'r' +
xmlRequest.responseText);
}
}
};
这就是我的ViewModel的样子:
function SomeViewModel(repository){
var self = this;
var def = $.Deferred();
this.initialize = function () {
var def = $.Deferred();
$.when(repository.LoadSomeData())
.done(function (data) {
def.resolve();
});
return def;
};
}
这就是我从aspx页面调用的方式:
var viewModel = new SomeViewModel(new SomeRepository());
viewModel.initialize().done(alert('viewmodel initialized'));
alert(viewModel.someProperty);
我已经成功地使用了一个辅助变量来放置ajax结果,当ajax调用在函数内部时(仅在ajax为async=false时有效),并且我需要函数返回ajax结果。我不知道这是否是最好的解决方案。
function ajaxFunction(){
var result='';
$.ajax({
type: "POST",
url: "someUrl",
cache: true,
async: false,
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
//success: handleHtml,
success: function(data) {
alert('data received');
result=data;
},
error: ajaxFailed
});
return result;
}
它是同步的并不重要(尽管它确实不应该是同步的)。从ajax回调内部返回值将不会导致从包含函数返回值。
无论如何,使用异步ajax通常是一个更好的想法,但这将迫使您创建一个API,允许其客户端传入处理程序,以便在ajax请求完成时调用。为此,您需要为"LoadSomeData"函数提供一个参数。调用方会传入一个函数,您的ajax"成功"处理程序会将结果(或结果的一些转换;取决于您正在做什么)传递给回调。这与ajax调用本身中使用的回调是相同的想法。
相关文章:
- CKFinder 3为所选文件返回错误的URL
- 使用ajax上传的文件返回错误,但使用c#在asp.net的服务器端正常提交的文件
- 通过AJAX发送文件返回'blob'错误
- NodeJS FS 不从多个文件返回数据
- AngularJS $http GET 请求到本地 JSON 文件返回语法错误:意外令牌]
- 文件在目录中,但isDirectory()为文件返回false
- 如何在 .ajax jquery 中从 php 文件返回值
- 如何通过 AJAX 从 PHP 文件返回 JavaScript
- 如何在 angularjs 工厂中使用 json 文件返回对象数组
- 编写从 XML 文件返回数据的搜索字段脚本
- 从外部 js 文件返回样式表
- 从单独的文件返回 AJAX 响应文本
- 从读取文件返回未定义
- NodeJS编辑二进制文件比将文件返回给用户
- 使用JQuery从JSON文件返回数组
- ajax调用不会从外部JS文件返回数据
- 无法使用AngularJS中的HTTP get调用从JSON平面文件返回结果
- 使用AJAX将Javascript字符串发送到PHP文件,然后从文件返回数组
- 如何将Javascript对象传递给php以进行sql查询,并将数据作为下载的csv文件返回
- 搜索文本文件返回一个数字