在ajax代码之外访问ajax响应数据

我正在尝试在ajax代码之外访问j_data。我在该线程How do I return the response from an asynchronous call?中找到了关于如何使用承诺,延迟对象或回调进行详细响应的详细信息,但我仍然不确定如何将所写内容应用于我的情况。例如,回调代码涉及处理函数中的数据并将处理后的数据交还给ajax所在的函数。下面的代码用于在按下搜索按钮时发生的ajax调用。然后,它将使用该数据显示在图像滑块中。我所希望的是能够在我的Ajax代码之外使用j_data,以便可以在for循环中使用j_data.url之类的东西。谢谢你的帮助。

$(function() {

  $('#search').click(function first(j_data) {
    var nameVal = $('#shouhinName').val();
    var makerVal = $('#makerName').val();
    var categoryVal = $('#selectText').val();
    var sliderVal = $('#hideme').val();

    $.ajax({
      type: "POST",url: "shelf/test",data: {


        shouhinName: nameVal,makerName: makerVal,selectText: categoryVal,best: sliderVal

      },success: function hi(j_data) {

        alert(j_data.url);

        console.log(j_data);
        $('.search-items').children().remove();

        let index = 0;
        const display = "table"; 
        const x = 0;
        const y = 0;
        var hdnName = document.getElementById("sendServ");
        hdnName.value = '';
        document.body.style.display = display;
        var selectedItem = document.getElementById("selectedItem");





        for (i = 0; i < 200; i++) {

          $('.search-items').slick('slickRemove',0);

        canvasArr = [];
        for (const image of j_data.url) {

          // console.log();
          //each image will correspond to a canvas element
          const canvas = document.createElement("canvas");
          canvas.setattribute("name","canvas");
          const ctx = canvas.getcontext("2d");


          //each canvas element will has is own properties (in this case all the same)
          canvas.id = "optiona" + [index];

          var canId = canvas.id;
          var tooltip = j_data.tooltip;

          canvas.setattribute('width','75px');
          canvas.setattribute('padding-top','56.25%');
          canvas.setattribute('object-fit','contain');
          canvas.setattribute('data-html','true');

          canvas.classname = 'searching';


          var div = document.createElement("div");
          div.setattribute('data-html','true');
          div.id = j_data.itemid[index]; //image.slice(26,34);
          var content = document.createTextNode(index + 1);



          drawImages(canvas,7);

          canvas.addEventListener("click",optionClicke,false);

          var text = j_data.tooltip[index];

          div.title = text;
          document.getElementById('search-slider').appendChild(div);
          document.getElementById(div.id).appendChild(canvas);
          document.getElementById(div.id).appendChild(content);



          document.getElementById(div.id).addEventListener('contextmenu',(ev) => {
            ev.preventDefault();

            if (image !== '/check/assets/img/noimage.png') {
              window.open(`/check/assets/img/${image} `,'mywindow',"width=500,height=500");
            } else {}

          },false);

          console.log(image);
          index++;

        }


        function drawImages(canvas,f) {

          const ctx = canvas.getcontext("2d");
          const background = new Image();
          const ctr = selectedItem.getcontext("2d");

          index = canvas.id.replace(/\D/g,"");

          if (f == 7) {


            if (j_data.url[index] !== '/check/assets/img/noimage.png') {
              background.src = "/check/assets/img/" + j_data.url[index];
            } else {
              background.src = '/check/assets/img/noimage.png'
            }

            background.onload = function() {

              ctx.drawImage(background,canvas.width,canvas.height);

            };
          }




          if (f == 1) {
            background.src = "/check/assets/img/" + images.url[index];

            background.onload = function() {
              ctx.drawImage(background,canvas.height);

            };

          }



          /////

          if (f == 2) {
            background.src = "/check/assets/img/shelf/photo/" + topData.rightFace[index - images.url.length - 1];

            background.onload = function() {
              ctx.drawImage(background,canvas.height);

            };

          }


          ////

          if (f == 3) {
            background.src = "/check/assets/img/shelf/photo/" + topData.rightTag[index];

            background.onload = function() {
              ctx.drawImage(background,canvas.height);
            };

          }

          ////

          if (f == 4) {
            if (topData.leftTag[index - images.url.length - topData.rightFace.length - 1] !== "error.jpg") {
              background.src = "/check/assets/img/shelf/photo/" + topData.leftFace[index - images.url.length - topData.rightFace.length - 1];
            } else {
              background.src = "/check/assets/img/" + topData.leftFace[index - images.url.length - topData.rightFace.length - 1];
            }
            //   console.log( topData.leftTag[index - leftLoop]);
            background.onload = function() {
              ctx.drawImage(background,canvas.height);
            };

          }
          ////

          if (f == 5) {
            if (topData.leftFace[index] !== "error.jpg") {
              background.src = "/check/assets/img/shelf/photo/" + topData.leftTag[index];


            } else {
              background.src = "/check/assets/img/" + topData.leftTag[index];
            }

            // console.log(background.src);
            background.onload = function() {
              ctx.drawImage(background,canvas.height);

            };

          }
          if (f == 6) {
            background.src = "/check/assets/img/" + topData.zenkai;
            console.log(background.src);
            // console.log(background.src);
            background.onload = function() {
              ctx.drawImage(background,canvas.height);
            }
          }

        }

        function drawX(canvas,item) {
          const ctx = canvas.getcontext("2d");


          ctx.beginPath();
          ctx.arc(40,75,25,2 * Math.PI,false);
          ctx.lineWidth = 5;
          ctx.strokeStyle = "#FF0000";
          ctx.closePath();
          ctx.stroke();
          //     console.log(item);
          hdnName.value = item;

        }



        function clear(canvas) {
          //   console.log("E: clearing canvas " + canvas.id);

          canvas.getcontext("2d").clearRect(0,canvas.height);


          drawImages(selectedItem);

          if (canvas.classname == 'suitei') {
            f = 1;
            drawImages(canvas,f);
          }
          if (canvas.classname == 'righty') {
            f = 2;
            drawImages(canvas,f);
          }
          if (canvas.classname == 'rTag') {
            f = 3;
            drawImages(canvas,f);
          }
          if (canvas.classname == 'lefty') {
            f = 4;
            drawImages(canvas,f);
          }
          if (canvas.classname == 'lTag') {
            f = 5;
            drawImages(canvas,f);
          }
          if (canvas.classname == 'zenkai') {
            f = 6;
            drawImages(canvas,f);
          }
          if (canvas.classname == 'searching') {
            f = 7;
            drawImages(canvas,f);
          }


        }

        function optionClicke(e) {
          log = true;
          const canvas = document.getElementsByTagName("canvas");
          const selectedItem = document.getElementById("selectedItem");

          var hdnName = document.getElementById("sendServ");
          let index = 0;


          for (const option of canvas) {
            console.log(canvas.length);
            if (log)
              //  console.log("I: User clicked at option " + e.target.id + ":" + option.id);
              log = false;
            if (e.target.id === option.id) {
              // console.log("R: Drawing request at canvas " + option.id);
              // console.log(j_data.itemid[index]);
              const item = j_data.itemid[option.id.split('optiona',-1)[1]];
              console.log('draw' + item);
              //    console.log(index);
              // option = canvasArr[index];
              drawX(option,item);

            } else {
              //   console.log("R: Clearing request at canvas " + option.id);
              clear(option);
              //console.log('clear'+item);
            }
            index++;
          }

        }

        $('.search-items').slick('unslick').slick('reinit');
        $(document).ready(function() {
          $('.search-items').not('.slick-initialized').slick({
            infinite: false,//true
            slidesToShow: 8,slidesToScroll: 8,arrows: true,centerMode: false,width: 200,prevArrow: $('.prev'),nextArrow: $('.next')
          });
        });

      },error: function(xhr,status,error) {
        console.log("post error");
        console.log(error);
        alert(error);
      },complete: function(xhr,status) {
        console.log("fin");
      },});
  });
});

编辑:

我试图使我的ajax变得更简单,只是为了接收我的数据。我尝试过在这里使用回叫,但是在我的函数之外使用j_data并没有运气。

$('#search').click(function ajaxCall(j_data) {
                  var nameVal = $('#shouhinName').val();
                  var makerVal = $('#makerName').val();
                  var categoryVal = $('#selectText').val();
                  var sliderVal = $('#hideme').val();

                  $.ajax({
                        type: "POST",data: {


                              shouhinName: nameVal,best: sliderVal

                        },success: j_data

                  });
            });
BUG2010 回答:在ajax代码之外访问ajax响应数据

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3126744.html

大家都在问