0

我有一个程序需要我不断地将阵列从屏幕来回发送到服务器。数组很重要,所以我需要它。

因此,它从 onclick 中的 php 数组开始 -> 它转到 javascript 并再次调用 php 函数,然后将其返回给 javascript 函数。这就是我迷路的地方。返回 php 数组后,我试图将其放回 onclick 中,以便当用户再次单击时,新数组与 onclick 一起发送。

我该怎么做呢?

到目前为止我所拥有的:

在 javascript 中,收到成功消息并且 PHP 函数提供新数组后,我设置了类似这样的设置,其中 msg 保存值。msg.question_id 只保存一个整数,msg.array 保存一个 php 数组。

document.getElementById('buttons').innerHTML ="<a href='javascript:void(0)' onclick=\"movie_guess('yes',"+msg.question_id+","+msg.array+")\"><img  src=\"/assets/yes.png\" ></a><a href=\"javascript:void(0)\" onclick=\"movie_guess('no',"+msg.question_id+","+msg.array+")\"><img  src=\"/assets/no.png\" ></a> ";
4

2 回答 2

2

好吧,我猜你不应该在 ajax 响应中返回 PHP 数组。您可以将其作为带有分隔符的字符串发送。成功响应后,您可以拆分它们并创建一个 javascript 数组。您也可以使用 JSON。对其进行编码以访问它。

$phpArr=( 0 => 'Zero', 1 => 'One', 2 => 'Two'); // PHP Code
var jsArr= <?php echo json_encode($phpArr); ?>; // Javascript Code
for($i=0;<stop-condition>;$i++){      alert(jsArr[i]);  } // Javascript Code
于 2013-03-06T07:26:05.620 回答
0

这是您要添加的元素,正确缩进:

<a href='javascript:void(0)' onclick=\"movie_guess('yes',"+msg.question_id+","+msg.array+")\">
  <img  src=\"/assets/yes.png\" >
</a>
<a href=\"javascript:void(0)\" onclick=\"movie_guess('no',"+msg.question_id+","+msg.array+")\">
  <img  src=\"/assets/no.png\" >
</a>

相反,您可以在没有处理程序的情况下添加它(我也用作#链接目标;还要注意我如何避免转义引号以及如何将长字符串拆分为多行):

var buttons = document.getElementById('buttons');
buttons.innerHTML = 
  '<a href="#"><img src="/assets/yes.png"></a>'+
  '<a href="#"><img src="/assets/no.png"></a>'

然后将事件处理程序添加为函数。这可以提高性能并让您传递当前范围内可见的任何内容(我假设msg它是一个 javascript 对象并且它不会改变)。addEventListener还有其他好处onclick=function(){...}

var links = buttons.getElementsByTagName("a");
links[0].addEventListener("click", function(){
  movie_guess('yes', mgs.question_id, msg.array);
});
links[1].addEventListener("click", function(){
  movie_guess('no', mgs.question_id, msg.array);
});

更长但更快的版本是完全不触摸innerHTML,而是操作 DOM:

var buttons = document.getElementById('buttons');
var aYes = document.createElement("a");
aYes.href = "#";
aYes.addEventListener(...);
var imgYes = document.createElement("img");
imgYes.src = "/assets/yes.png";
aYes.appendChild(imgYes);
buttons.appendChild(aYes);
var aNo = document.createElement("a");
...
于 2013-03-06T07:33:08.820 回答