将ajax响应数组存储到变量中以备后用

9

您好,我需要把一个AJAX响应存储到两个变量x和y或数组中。我的AJAX响应是一个数组。我能看到数据,但只能在调用时通过警报查看。我需要在AJAX调用之外获取数据。

大家好,我需要把一个 AJAX 响应存储到两个变量 x 和 y 或者一个数组中。我的 AJAX 响应是一个数组。我已经能够看到数据,但只有在调用中弹出警报时才能看到。我需要在 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 吗? - Touki
1
这应该真的能够工作,你尝试过在 AJAX 函数外部警告吗?另外,在最后一行缺少 });,这也可能是问题所在。 - Linas
啊哈,抱歉我纠正一下,缺少“});”。我已经有x和y的值了,我将通过PHP从数据库中获取它们。 - Micky
1
拥有全局变量通常不是实现您想要的功能的最佳方式,在这种情况下,很有可能会导致您在未初始化变量时使用它,或者它包含您不希望的值。完成AJAX调用后,您应该将data.PosXdata.PosY传递到另一个要执行的函数中。 - Rory McCrossan
4个回答

34

如果我理解正确,您想在代码中稍后重复使用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>

我很高兴能够帮助。如果这正是你所寻找的,请将我的帖子标记为答案 :) - tftd
谢谢,伙计!终于可以工作了!之前所有的方法都没用,但这个行了!谢谢! - Refilon
你好,只是为了理解:我认为AJAX本质上是异步的。假设我不想使用"async: false",那么全局变量是唯一的解决方案吗?还是有一种方法可以在另一个脚本中“设置”变量值,但稍后再运行它。希望你明白我的意思。在我的情况下,我有两个表单和一个由提交第一个表单返回的变量,必须在第二个表单中的隐藏输入字段中使用。但是正如你所猜测的那样,第二个表单将在稍后提交。谢谢你的提示。 - Robert

22
你可以将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
这应该是最佳答案。谢谢! - Gixty
这正是我正在寻找的。 - Abhay

0
如果你声明了变量,你可以在ajax之外访问它的值。
例如:
<script type="text/javascript">
   var x = '';
   var y = '';

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

如果 Ajax 正常工作,您可以全局访问变量 xy

0
如果您在文档准备好的处理程序中运行此代码,则x和y变量并不是真正的全局变量。请尝试使用window.x=''; window.y='';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接