我想从一个名为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”
我如何解决这个问题,是否有更好的方法来发送阵列?
谢谢。
答案 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)
你的问题是双重的。
您的js_GetArray
函数实际上并未返回您的数据。
您实际上是从传递给$.get
的回调中返回数据,而不是从js_GetArray
函数
异步执行会导致问题。这通常是在javascript中发生的,是你传递一个回调函数,后来在给定的进程完成后回调。 $.get
必须向网络服务器发出请求并返回内容。这不可能立即发生,所以javascript 会在结束时通过结果回复。
因此,在$.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/