-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 を使用してロードされたときに、配列を複製しようとしています。すべての null 割り当てを、適切な 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

2 ページ目に 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 の神々が配列をどこにでも配置できるようにします。サーバー上のランダムなテキスト ファイルがいくつあっても構いません。
  • 関数にもわかりやすい名前を付ける
  • 結果が厄介なグローバルとして使用される場合でも、可能な限りグローバルを使用する代わりに、常に関数から値を返します。私を信じて。
  • ajax 呼び出しに JavaScript 関数名を入れないでください。代わりに JSON を使用し、関数やその他のスクリプトをそれが属する JavaScript ファイルに保持します。
  • Mysql があなたの命を救います!!

免責事項 - 私はこのコードを実行しませんでしたが、すべてが正しく接続されていれば、基本的には機能するはずです。

于 2013-08-15T00:19:37.553 に答える