我正在尝试将json数组返回给函数并输出结果。这是我想要实现的一个例子,但'thisArray'一直是'undefined'。我究竟做错了什么?感谢反馈...
<html>
<head>
<title>Test Array</title>
function recipesTestObject(recId, recipe)
{
this.recId = recId;
this.recipe = recipe;
}
function initialise() {
$.getJSON ("/mealplanners2/apprequests/mealplanner.php?action=getRecipesByCat", { recCategory: 2 }, function(json) {
var recipeTest = new Array();
$.each (json.recipes, function (){
recipeTest[recipeTest.length] = new recipesTestObject(this['id'], this['recName']);
});
return recipeTest;
});
}
function display(thisArray) {
for (var i=0; i < thisArray.length; i++) {
document.write("Name: "+thisArray[i].recipe+"<br>");
}
}
</script>
</head>
<body>
<script language="javascript">
var x;
x = initialise();
display(x);
</script>
</body>
</html>
答案 0 :(得分:0)
您在成功回调函数中返回它,但不是从初始化函数返回。
有很多方法,一个是使用回调:
function initialise(callback) {
$.getJSON ("/mealplanners2/apprequests/mealplanner.php?action=getRecipesByCat",
{ recCategory: 2 }, function(json) {
var recipeTest = [];
$.each (json.recipes, function (){
recipeTest.push(new recipesTestObject(this['id'], this['recName']));
});
callback(recipeTest);
});
}
然后你这样称呼它:
initialise(display);
答案 1 :(得分:0)
thisArray
为undefined
,因为initialise
未返回值。
您可以使用回调函数来解决此问题:
function initialise(callback) {
$.getJSON("/mealplanners2/apprequests/mealplanner.php?action=getRecipesByCat", {
recCategory: 2
}, function (json) {
var recipeTest = [];
$.each(json.recipes, function () {
recipeTest.push(new recipesTestObject(this.id, this.recName));
});
callback(recipeTest);
});
}
然后而不是
var x;
x = initialise();
display(x);
你可以这样做:
initialize(display);
请注意,我使用的是[]
而不是new Array()
。这是初始化数组的首选方法。
我还使用recipeTest.push(...)
代替recipeTest[recipeTest.length] = ...
,因为push
是将项目添加到数组的首选方法。
您也可以this.id
代替this['id']
。