Jquery 如何在ajax方法中设置公共变量的值?
我尝试在ajax方法的外部使用ajax的结果,并编写了以下代码,但得到的错误是:Jquery 如何在ajax方法中设置公共变量的值?,jquery,ajax,Jquery,Ajax,我尝试在ajax方法的外部使用ajax的结果,并编写了以下代码,但得到的错误是: TypeError: foods is null for (var j = 0; j <foods.obj.length; j++) { TypeError:foods为空 对于(var j=0;j来说,这是因为在ajax响应回调之前执行了循环。 要解决此问题,请创建一个函数&在ajax响应后执行它 试试下面的方法- $(document).ready(function () { var
TypeError: foods is null
for (var j = 0; j <foods.obj.length; j++) {
TypeError:foods为空
对于(var j=0;j来说,这是因为在ajax响应回调之前执行了循环。
要解决此问题,请创建一个函数
&在ajax响应后执行它
试试下面的方法-
$(document).ready(function () {
var foods = null;
$.ajax({
url: '/Train/TrianFood',
data: { Tarrif: 1 },
type: "POST",
context: this,
success: function (result) {
foods = result;
foodSelectHandler();
},
error: function () {}
});
var parentOfFood = $('#accordion1 .person-information');
function foodSelectHandler(){
for (var i = 0; i < parentOfFood.length; i++) {
var foodSelect = $(parentOfFood[i]).find('select[name$=Food]');
for (var j = 0; j <foods.obj.length; j++) {
foodSelect.append(new Option(foods.obj[j].ServiceType, foods.obj[j].ServiceTypeCode));
}
}
}
});
$(文档).ready(函数(){
var=null;
$.ajax({
url:“/Train/TrianFood”,
数据:{Tarrif:1},
类型:“POST”,
背景:这,,
成功:功能(结果){
食物=结果;
foodSelectHandler();
},
错误:函数(){}
});
var parentOfFood=$(“#accordion1.个人信息”);
函数foodSelectHandler(){
for(var i=0;i for(var j=0;jI是由于异步调用而发生的。您的for循环在ajax成功调用之前运行,因此foods不包含任何信息。请尝试在成功函数本身中编写代码
$(document).ready(function () {
var foods = null;
$.ajax({
url: '/Train/TrianFood',
data: { Tarrif: 1 },
type: "POST",
context: this,
success: function (result) {foods = result;
var parentOfFood = $('#accordion1 .person-information');
for (var i = 0; i < parentOfFood.length; i++) {
var foodSelect = $(parentOfFood[i]).find('select[name$=Food]');
for (var j = 0; j <foods.obj.length; j++) {
foodSelect.append(new Option(foods.obj[j].ServiceType, foods.obj[j].ServiceTypeCode));
}
}
},
error: function () {}
});
});
$(文档).ready(函数(){
var=null;
$.ajax({
url:“/Train/TrianFood”,
数据:{Tarrif:1},
类型:“POST”,
背景:这,,
成功:功能(结果){foods=result;
var parentOfFood=$(“#accordion1.个人信息”);
for(var i=0;i 对于(var j=0;j而言,问题涉及这样一个事实:在为foods赋值之前,您正在运行一个异步函数。这是一个问题,因为只有在请求成功时才能为foods赋值。
没有办法知道需要多长时间,也无法知道请求是否会成功。这是一种典型的情况
这是调整代码的方法:
$(document).ready(function() {
var foods = null;
$.ajax({
url: '/Train/TrianFood',
data: {
Tarrif: 1
},
type: "POST",
context: this,
error: function() {},
success: appendFood
});
function appendFood(result) {
foods = result;
var parentOfFood = $('#accordion1 .person-information');
for (var i = 0; i < parentOfFood.length; i++) {
var foodSelect = $(parentOfFood[i]).find('select[name$=Food]');
for (var j = 0; j < foods.obj.length; j++) {
foodSelect.append(new Option(foods.obj[j].ServiceType, foods.obj[j].ServiceTypeCode));
}
}
}
});
$(文档).ready(函数(){
var=null;
$.ajax({
url:“/Train/TrianFood”,
数据:{
塔里夫:1
},
类型:“POST”,
背景:这,,
错误:函数(){},
成功:食物
});
功能食品(结果){
食物=结果;
var parentOfFood=$(“#accordion1.个人信息”);
for(var i=0;i
以下代码在成功回调ajax之前执行,因此foods
保持为空
var parentOfFood = $('#accordion1 .person-information');
for (var i = 0; i < parentOfFood.length; i++)
{
var foodSelect = $(parentOfFood[i]).find('select[name$=Food]');
for (var j = 0; j <foods.obj.length; j++)
{
foodSelect.append(new Option(foods.obj[j].ServiceType, foods.obj[j].ServiceTypeCode));
}
}
var parentOfFood=$(“#accordion1.个人信息”);
for(var i=0;i 对于(var j=0;j),一个可能的原因是,ajax响应没有进入成功回调。您可以在成功回调和错误回调中放置一个console.log语句,看看发生了什么吗?ajax方法没有任何错误,目前正在工作。
var parentOfFood = $('#accordion1 .person-information');
for (var i = 0; i < parentOfFood.length; i++)
{
var foodSelect = $(parentOfFood[i]).find('select[name$=Food]');
for (var j = 0; j <foods.obj.length; j++)
{
foodSelect.append(new Option(foods.obj[j].ServiceType, foods.obj[j].ServiceTypeCode));
}
}