我在使用jquery ajax调用构建的javascript中使用数组时遇到问题。我可以创建数组,并且知道它存在于jquery函数中,因为我可以在浏览器控制台中记录它。我不会在函数运行之后将其拾取,因为它在crews = loadCrews()行之后返回为undefined 。这是我的主要javascript文件:
$(document).ready(function(){
var crews = [];
console.log("loading crews")
crews = loadCrews();
console.log(crews);
$('#datetimepicker1').datetimepicker({
pickTime: false
});
$('#datetimepicker2').datetimepicker({
pickTime: false
});
$("#input_form").submit(function(){
console.log(crews)
var querystring = $(this).serialize();
alert(querystring)
return false;
});
});
function loadCrews(){
$.getJSON( "url", function( data ) {
var items = [];
$.each( data, function( key, val ) {
items.push(val.UNID);
})
console.log(items)
return items
});
};
更新1:我已经在ajax请求上使用了回调,它开始有意义了。感谢所有好读。不幸的是,即使在使用.done回调之后,我仍然无法传回我的数组。
这是更新后的代码:
$(document).ready(function(){
loadCrews();
$('#datetimepicker1').datetimepicker({
pickTime: false
});
$('#datetimepicker2').datetimepicker({
pickTime: false
});
$("#input_form").submit(function(){
var querystring = $(this).serialize();
alert(querystring)
return false;
});
});
function loadCrews(){
var url = //url of service for all crew names
$.getJSON( url)
.done(function( data ) {
var crews = [];
$.each( data, function( key, val ) {
crews.push(val.UNID);
})
console.log(crews)
return crews
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});
};
答案 0 :(得分:0)
Ajax调用是异步的,这意味着javascript将继续执行,而不是等待ajax调用先完成。这意味着crews变量被赋值给一个尚不存在的值(因为在分配变量时ajax调用没有完成)。
您可以使用promise在ajax调用完成时分配值,或者只是将值分配给ajax成功回调中的crews变量
答案 1 :(得分:0)
您正在从$ .getJSON内部返回项目,因此loadCrews没有返回任何内容,因此crews = nothing ='undefined'。要解决此问题,您可以在getJSON函数之外移动声明var item = []。古德勒克!