将解析后的数组发送到处理中

时间:2014-09-01 15:10:21

标签: javascript php ajax json processing

我想从一个名为load.php的php文件中将一个Integers数组发送到一个JS脚本,然后将其发送到用js编写的Processing文件。

在load.php中我创建了我想要发送的数组并使用json发送它(该数组至少包含40个整数):

echo json_encode($varsArray);

在名为game.php的主要php文件中是脚本:

<script language="JavaScript" type="text/javascript">
function js_GetArray() {
    $.get( "load.php", function( actiondata ) {
        var obj = JSON.parse(actiondata);
        return obj;
    });
}

使用此脚本我从load.php(我以json格式接收)请求数组,接收后我解析它并将其发送回处理文件。

在Processing文件中,我收到了这样的数组:

var objArr;
void setup(){
    objArr = js_GetArray();

}
void draw() {  
    alert(objArr[1]);
}

激活警报时,我收到错误:

  

未捕获的TypeError:无法读取未定义的属性“1”

我如何解决这个问题,是否有更好的方法来发送阵列?

谢谢。

2 个答案:

答案 0 :(得分:1)

你几乎就在那里。 AJAX意味着&#34; ASYNCHRONOUS Javascript和XML&#34;。也就是说,当ajax调用仍在进行时,您的draw函数会执行。因此,objArr仍为空。

在回调中拨打draw

<script language="JavaScript" type="text/javascript">
function js_GetArray() {
    $.get( "load.php", function( actiondata ) {
        var obj = JSON.parse(actiondata);
        // return obj; doesn't work!
        draw ( obj );
    });
}

void draw(objArr) {  
  alert(objArr[1]);
} 

答案 1 :(得分:-1)

你的问题是双重的。

  1. 您的js_GetArray函数实际上并未返回您的数据。 您实际上是从传递给$.get的回调中返回数据,而不是从js_GetArray函数

  2. 返回
  3. 异步执行会导致问题。这通常是在javascript中发生的,是你传递一个回调函数,后来在给定的进程完成后回调。 $.get必须向网络服务器发出请求并返回内容。这不可能立即发生,所以javascript 会在结束时通过结果回复

  4. 因此,在$.get调用回调之前,您无法获取数据。

    您需要执行以下操作:

    var objArr;
    
    function js_GetArray(callback) {
        $.get( "load.php", function( actiondata ) {
            var obj = JSON.parse(actiondata);
            callback(obj);
        });
    }
    
    void setup(){
        js_GetArray(function(data) {
            objArray = data;
        });
    }
    void draw() {  
        alert(objArr[1]);
    }
    

    您可能想了解异步代码在javascript中的工作原理。 这是一篇文章:

    http://recurial.com/programming/understanding-callback-functions-in-javascript/