如何将 js 变量从 ajax 传递到内部 ajax

How to pass js variable from ajax into inner ajax?

本文关键字:ajax 内部 js 变量      更新时间:2023-09-26

我有返回所有claim_id的 ajax 。从claim_id,我调用另一个 ajax 来获取此claim_id的所有字段。但是我无法将第一个 ajax 中的 claim_id 值传递到内部 ajax 中的成功函数中。它将始终返回claim_id的最后一个值。我怎样才能分别获得claim_id

$(document).ready( function () {
    var c_id = document.getElementById("c_id").value;
    $.ajax({
           url: '../rest/CategoryService/compcategory/'+c_id,
           type: 'POST',
           data: {
              format: 'json'
           },
           error: function() {
              $('#info').html('<p>An error has occurred</p>');
           },
           success: function(data) {
               //get the claim id
                for (i in data){            
                    var claim_id = data[i].iD;
                    // alert(claim_id); 
                    //get all the fields for the claim id
                    $.ajax({
                           url: '../rest/CategoryService/fieldcategory/'+claim_id,
                           type: 'POST',
                           data: {
                              format: 'json'
                           },
                           error: function() {
                              $('#info').html('<p>An error has occurred</p>');
                           },
                           success: function(data2) {
                               var textfield = "";
                               //construct the header fields                       
                               textfield += "<th>Sub Category</th>";
                               for (z in data2){    
                                   var field = data2[z].field;
                                   textfield += "<th>"+field+"</th>";
                               }
                               textfield += "<th>Action</th>";
                               alert(claim_id); 
                               alert(textfield);        
                                $("#tabledata"+claim_id+" thead").append(
                                "<tr>"+textfield+"</tr>");
                           },
                        });
                }
           },
        });
} );

您可以在第二个ajax params中定义它,然后在成功函数中用作this.param_name

var claim_id = data[i].iD;
$.ajax({
    url: '../rest/CategoryService/fieldcategory/'+claim_id,
    claim_id: claim_id,  // defining your custome params here
    /*your other params*/
    success: function(data2) {
        alert(this.claim_id); // will alert your var claim_id variable
    }
});

或者第二个选项是在 js 中定义全局变量并成功使用它

基本上,代码中的问题是 for 循环不会等待 ajax 调用完成。这就是你总是得到最后claim_id的原因。尝试以下代码:

$(document).ready( function () {
        var c_id = document.getElementById("c_id").value;
        $.ajax({
               url: '../rest/CategoryService/compcategory/'+c_id,
               type: 'POST',
               data: {
                  format: 'json'
               },
               error: function() {
                  $('#info').html('<p>An error has occurred</p>');
               },
               success: function(data) {
                    var getClaimData = function(pointer, dataLength) {
                        var claim_id = data[pointer].iD;
                        $.ajax({
                               url: '../rest/CategoryService/fieldcategory/'+claim_id,
                               type: 'POST',
                               data: {
                                  format: 'json'
                               },
                               error: function() {
                                  $('#info').html('<p>An error has occurred</p>');
                               },
                               success: function(data2) {
                                   var textfield = "";
                                   //construct the header fields                       
                                   textfield += "<th>Sub Category</th>";
                                   for (z in data2){    
                                       var field = data2[z].field;
                                       textfield += "<th>"+field+"</th>";
                                   }
                                   textfield += "<th>Action</th>";
                                   alert(claim_id); 
                                   alert(textfield);        
                                    $("#tabledata"+claim_id+" thead").append(
                                    "<tr>"+textfield+"</tr>");
                                    pointer++;
                                    if(pointer < dataLength) {
                                        getClaimData(pointer, dataLength);
                                    }
                               },
                            });
                    };
                    getClaimData(0, data.length);
               },
            });
    });