【问题标题】:Storing ajax response array into a variable for later usage将 ajax 响应数组存储到变量中以供以后使用
【发布时间】:2012-10-22 12:17:38
【问题描述】:

您好,我需要将 AJAX 响应存储到两个变量 x 和 y 或一个数组中。 我的 AJAX 响应是一个数组。我能够看到数据,但只有在 che call 时才会发出警报。 我需要ajax调用之外的数据

var x;
var y;

$.ajax({
    url: 'ajaxload.php',
    dataType: "json",
    success: function (data) {
        x = data.posX;
        y = data.posX;
        alert(x + " " + y);  // I can se data but I need outside ajax call
    }
});

【问题讨论】:

  • 你的意思是window.xwindow.y 吗?
  • 这应该真的有效,您是否尝试过在 ajax 函数之外发出警报,而且您在最后一行缺少});,这也可能是问题
  • 啊哈哈对不起我更正了});失踪。我已经有了 x e y 值,我将通过 php 从数据库中获取它。
  • 拥有全局变量通常不是实现您想要的最佳方式,在这种情况下,您很可能会在尚未初始化或包含值时使用变量你没想到。您应该将 data.PosXdata.PosY 传递给您想要在 AJAX 调用完成后执行的另一个函数。

标签: jquery ajax arrays


【解决方案1】:

如果我理解正确,您希望稍后在您的代码中重用 ajax 响应。 如果是这种情况,您当前的代码将无法工作,因为默认情况下,javascript 引擎不会等待 ajax 请求的响应。换句话说,下面的代码不起作用:

<script type="text/javascript">
$(document).ready(function(){
    var x; 
    var y;
    $.ajax({
        url: 'ajaxload.php',
        dataType: "json", 
        success: function(data) { 
            x= data.posX;
            y= data.posX;
            alert (x+" "+y);  // I can se data but I need outside ajax call
        }
    });
    alert(x+" "+y); // You won't see anything, because this data isn't yet populated. The reason for this is, the "success" function is called when the ajax request has finished (it has received a response).
})
</script>

您需要等待 ajax 响应。要使用 jQuery 做到这一点,您需要稍微修改您的代码:

<script type="text/javascript">
$(document).ready(function(){
    var data = $.parseJSON($.ajax({
        url:  'ajaxload.php',
        dataType: "json", 
        async: false
    }).responseText); // This will wait until you get a response from the ajax request.

    // Now you can use data.posX, data.posY later in your code and it will work.
    var x = data.posX;
    var y = data.posY;
    alert(x+" "+y);
    alert(data.posX+" "+data.posY);
});
</script>

【讨论】:

  • 很高兴能帮上忙。如果这是您正在寻找的内容,请将我的帖子标记为答案:)
  • 谢谢你!终于奏效了!没有什么对我有用,但这确实有效!谢谢!
  • 您好,只是为了理解:我认为 AJAX 本质上是异步的。假设我不想使用“async:false”,那么全局变量是唯一的解决方案吗?或者有没有办法在另一个脚本中“设置”变量值但稍后运行它。希望你明白我的意思。在我的情况下,我有两个表单和一个通过提交第一个表单返回的变量,必须在第二个表单的隐藏输入字段中使用。但正如您可能猜到的那样,第二个表单将在稍后提交。谢谢你的提示。
【解决方案2】:

您可以将 ajax 响应存储在全局数组中,以便在其他 javascript 函数中进一步使用

var ajaxResult=[];

$(document).ready(function(){

  $.ajax({
    url: 'ajaxload.php',
    async:true,
    dataType: "json", 
    success: function(data)
     { 
        ajaxResult.push(data);
     }
  });
});

otherJsfunc()
 {
  console.log(ajaxResult); 
 }

【讨论】:

  • 这应该是最好的答案。谢谢!
  • 这正是我想要的。
【解决方案3】:

如果您对变量进行 decalre,您可以访问 ajax 之外的值。

例如:

<script type="text/javascript">
   var x = '';
   var y = '';

   function sendAjax()
   {
        // your ajax call
        x= data.posX;
        y= data.posX;  
   } 
   sendAjax();
</script>

如果 ajax 运行良好,您可以访问变量 xy 全局

【讨论】:

    【解决方案4】:

    如果您在文档就绪处理程序中运行此代码,则您的 x 和 y 变量并不是真正的全局变量。试试window.x=''; window.y='';

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 2012-02-29
      • 2021-10-11
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多