use*_*383 17 javascript jquery
大家好.我看起来似乎是一个微不足道的问题.我有以下JavaScript:
$(function() {
var r = GetResults();
for(var i = 0; i < r.length; i++) {
// Do stuff with r
}
});
function GetResults() {
$.getJSON("/controller/method/", null, function(data) {
return data;
});
}
Run Code Online (Sandbox Code Playgroud)
由于我正在异步调用方法,脚本继续执行,当遇到for循环时,r显然不会有值.我的问题是:当我有一个正在进行异步操作的方法,并且我依赖于它在主块中返回的数据时,如何在数据返回之前暂停执行?就像是:
var r = GetResults(param, function() {
});
Run Code Online (Sandbox Code Playgroud)
其中函数是回调函数.我无法将for循环处理移动到JSON请求的回调函数中,因为我在整个页面中多次重用GetResults的功能,除非我想复制代码.有任何想法吗?
Ty *_*y W 13
将你的"使用r做块"移动到$ .getJSON回调中.在你交付之前你不能用r做东西,并且你必须使用r的第一个机会就是回调...那么就这样做吧.
$(function() {
var r = GetResults();
});
function GetResults() {
$.getJSON("/controller/method/", null, function(data) {
for(var i = 0; i < data.length; i++) {
// Do stuff with data
}
return data;
});
}
Run Code Online (Sandbox Code Playgroud)
Ajax已经给你一个回调,你应该使用它:
function dostuff( data ) {
for(var i = 0; i < data.length; i++) {
// Do stuff with data
}
};
$(document).ready( function() {
$.getJSON( "/controller/method/", null, dostuff );
});
Run Code Online (Sandbox Code Playgroud)
我之前遇到过类似的事情.你必须同步运行ajax调用.
这是我的工作示例:
$.ajax({
type: "POST",
url: "/services/GetResources",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: '{resourceFileName:"mapedit",culture:"' + $("#lang-name").val() + '"}',
cache: true,
async: false, // to set local variable
success: function(data) {
localizations = data.d;
}
});
Run Code Online (Sandbox Code Playgroud)