2

onclickイベントの後にJavascriptを使用してWebページのinnerHTMLを更新しようとしています。私のJavascript(java.js)は、このコードを使用して、innerHTMLに含まれるテキストをエコーバックするPHPページにアクセスします。つまり、隣り合っておらず、要素IDが異なる2つのアイテム(「color」テーブルと「item」テーブル)のinnerHTMLを更新したいと思います。java.jsからの各呼び出しは個別に正常に機能しますが(コメントアウトされている場合など)、両方を実行すると、どちらか最初の方が「読み込み中」メッセージでスタックし、2番目の呼び出しが機能します。Webブラウザに「content.php?item = '5'&color = '5'」をロードすると、両方のテーブルが表示されます。

これは$_GET[]の仕組みに関係しているのではないかと思います(これは完全には理解していません。PHPを使用するのはこれが初めてです)。ただし、呼び出しは順番に行われる必要があり、キー('item'と'color')は競合しないため、何が問題になっているのかわかりません。

java.js:

function makeActive(active_tab) {
    //item table
    callAHAH('content.php?item='+active_tab, 'item', 'getting items for tab '+active_tab+'. Wait...', 'Error');

    //color table
    callAHAH('content.php?color='+active_tab, 'color', 'getting colors for tab '+active_tab+'. Wait...', 'Error');
}

content.php:

if (isset($_GET['color'])) {
    require 'color.php';

    $index = 1*$_GET['color'];
    $arr = $ITEM_TYPES[$index];
    echoColorTable($arr); //makes table in color.php
} else {
    echo "color not set "; //debug
}

if (isset($_GET['item'])) {
    require 'item.php';

    $index = 1*$_GET['item'];
    echoItemTable($index); //makes table in item.php
} else {
    echo "item not set "; //debug
}
4

1 に答える 1

1

問題は、リンク先のcallAHAH関数にあります。var宣言時のキーワードはありませんreq。したがって、これはグローバル変数であり、一度に 1 つのリクエストしか存在できません。また、responseAHAH 関数でそのグローバル変数を再利用します。一般に、グローバル変数は、このような理由から悪い考えです。callAHAH 関数を完全に捨てて、グローバル変数を使用せずにまったく同じことを行う次のようなものを使用することをお勧めします。

function loadInto(url, id, loading, error) {
    var ajax;
    var el = document.getElementById(id);
    el.innerHTML = loading;

    if (typeof XMLHttpRequest !== 'undefined')
        ajax = new XMLHttpRequest();
    else // Some people still support IE 6
        ajax = new ActiveXObject("Microsoft.XMLHTTP");

    ajax.onreadystatechange = function(){
        if(ajax.readyState === 4){
            if(ajax.status == 200){
                el.innerHTML = ajax.responseText;
            }else{
                el.innerHTML = error;
            }
        }
    };

    ajax.open('GET', url);
    ajax.send();
}

また、名前も付けられていません。これcallAHAHは常にプラスです。

于 2012-06-15T00:49:51.287 に答える