Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何在ajax方法中设置公共变量的值?_Jquery_Ajax - Fatal编程技术网

Jquery 如何在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

我尝试在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 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;ifor(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));
     }
 }