-1

我有一个函数创建一个数组,其中包含来自 HTML DOM 方法的返回值:window.document.getElementById()

function makearray1(){
  var array1=[1,window.document.getElementById('divID'),['a','b'],[1,2]];
  }

然后我将数组传递给另一个函数

use(array1)

function use(xxx){
   xxx[1].innerHTML=xxx[2][0];
   }

并且'a'写在适当的div中


后来我决定把数组放在一个表单中,然后使用php将它发布到服务器上的一个txt文件中:

JSON.stringify(array)

所以现在我使用 AJAX 在页面的其余部分加载等之后从 txt 文件中调用数据......并且根本不包括用于制作数组的原始函数。

所以我的php基本上是这样的:

 $a1='use(';
 $data1 =file_get_contents("text_file.txt") ;
 $a2=')';

 echo $a1.$data1.$a2; 

和响应文本:

 var n= XMLHttpRequestObject.responseText;
 eval(n);

这几乎意味着:

 use(text_file)

 function use(xxx){
   xxx[1].innerHTML=xxx[2][0];
   }

问题是文本文件中的数组如下所示:

   [1,null,['a','b'],[1,2]]

代替:

   [1,window.document.getElementById('divID'),['a','b'],[1,2]]

我的问题:有什么方法可以做与我在这里尝试做的等效的事情,即立即使用 AJAX/php 在数组中复制 HTML/DOM 方法的返回值?

澄清一下:这是一个简单的例子。我实际上有一个巨大的多维数组,其中已经建立了指针或预取的 DOM 节点。现在我正在尝试在使用 ajax 加载文本版本时复制数组。我正在寻找一种递归方法来更改所有空分配,这些分配将立即获取适当的 DOM 节点。很可能我需要用响应文本来做,但希望我可以用 php 部分来做。

4

2 回答 2

0

您正在尝试在首先评估 getElementById 的任何计算机的内存中对 javascript 对象的引用进行字符串化,并且没有机会在最终客户端的计算机上表示某些内容。

改为发送 id:

function makearray1(){
  array1=[1,'divID',['a','b'],[1,2]];
  }

然后,在客户端:

function use(xxx){
   window.document.getElementById(xxx[1]).innerHTML=xxx[2][0];
   }

如果你真的想在最后评估它,你可以使用这个,我猜

function makearray1(){
  array1=[1,"window.document.getElementById(\"divID\")",['a','b'],[1,2]];
  }

我不知道你为什么要这样做

于 2013-08-14T23:49:28.387 回答
0

假设 dom 元素存在于第二页中,它应该看起来像这样。

JS:

function packDomData(){
  return {
          "MySpecificYetBriefProperty0":1,
          "DomID":"divID",
          "MySpecificYetBriefProperty1":['a','b'],
          "MySpecificYetBriefProperty2":[1,2]
      };
}
function useDomData(domData){
   document.getElementByID(domData.DomID).innerHTML=domData.MySpecificYetBriefProperty1[0];
}

PHP:

//Make sure the contents of this file is the json from packDomData. use json_encode in php or JSON.stringify in js
echo file_get_contents("text_file.txt");

var myData = JSON.parse(XMLHttpRequestObject.responseText);
useDomData(myData);

我曾经像你一样编码。以下是一些帮助将我的编码恐惧变成有趣的工作的技巧:

  • 每当您实际上并未循环遍历数组时,请使用具有描述性属性的对象而不是数组 - 我保证它会让您和其他人头疼!“DomID”比 1 灵活得多,如果您更改数组中的顺序,javascript 之神会帮助您,该数组无处不在 - 包括您服务器上的许多随机文本文件!
  • 还为函数使用描述性名称
  • 始终从函数返回一个值,而不是尽可能使用全局变量,即使结果随后被用作讨厌的全局变量。相信我。
  • 永远不要将 javascript 函数名称放在 ajax 调用中。改用 JSON 并将函数和其他脚本保留在它所属的 javascript 文件中。
  • mysql会救你的命!!

免责声明 - 我没有运行此代码,但是当您正确连接所有内容时,它基本上应该可以工作。

于 2013-08-15T00:19:37.553 回答