1

わかりましたので、私はすべての ajax に非常に慣れていません (文字通り数日未満です) が、雇用主のために作成しているフォームには必要です。

基本的に、私が何をしても、複数の機能では機能しません。詳しく説明すると、「onchange」を使用して、1 つのドロップダウンに基づいてページの 4 つの異なる部分を更新しようとしています。現在、1つの部分を更新すると正常に機能し、それ以上の更新は失敗します...しかし、失敗するだけでなく、たとえば、ajax部分を呼び出すと、単純なアラートも失敗します...しかし、アラートでそれを行うと最初は機能しますが、ajax 呼び出しの後に何かを配置すると、再び失敗します。それが理にかなっていることを願っています。たとえば、私がそうする場合にも機能します。onchange と onblur を同じ要素に対して実行すると、2 回実行されます。私はコードを投稿し、うまくいけば、私がせせらぎ笑する代わりに、より理にかなっているでしょう。

<select name="pType" id="ptype" onchange="dostuff()">

それが入力要素です...

<script type="text/javascript">
function dostuff(){
ajaxpage('adminincludes/popoptions.php?pID=<?= $sql['pID']; ?>&pType=' + ptype.value,'options');
alert('test');
}
</script>

...そして、それはdostuffコード、またはとにかく例ですが、それにもかかわらず失敗するため、php部分を無視します。その部分は正常に機能します。

現在、コードの残りの部分は外部ファイル内にあり、どこかに問題があると思います...ただし、私は ajax に不慣れであり、js を実際に必要としていたことがないため、js を最も得意としているわけではありません。必要なときに必要なことを学んだだけです。

    var bustcachevar = 1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects = ""
var rootdomain = "http://" + window.location.hostname
var bustcacheparameter = ""

function ajaxpage(url, containerid) {
    var page_request = false
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
    page_request = new XMLHttpRequest()
    else if (window.ActiveXObject) { // if IE
        try {
            page_request = new ActiveXObject("Msxml2.XMLHTTP")
        } catch (e) {
            try {
                page_request = new ActiveXObject("Microsoft.XMLHTTP")
            } catch (e) {}
        }
    } else
    return false
    page_request.onreadystatechange = function () {
        loadpage(page_request, containerid)
    }
    if (bustcachevar) //if bust caching of external page
    bustcacheparameter = (url.indexOf("?") != -1) ? "&" + new Date().getTime() : "?" + new Date().getTime()
    page_request.open('GET', url + bustcacheparameter, true)
    page_request.send(null)
    page_request.send(null)
}

function loadpage(page_request, containerid) {
    if (page_request.readyState == 4 && (page_request.status == 200 || window.location.href.indexOf("http") == -1)) document.getElementById(containerid).innerHTML = page_request.responseText
}

function loadobjs() {
    if (!document.getElementById) return
    for (i = 0; i < arguments.length; i++) {
        var file = arguments[i]
        var fileref = ""
        if (loadedobjects.indexOf(file) == -1) { //Check to see if this object has not already been added to page before proceeding
            if (file.indexOf(".js") != -1) { //If object is a js file
                fileref = document.createElement('script')
                fileref.setAttribute("type", "text/javascript");
                fileref.setAttribute("src", file);
            } else if (file.indexOf(".css") != -1) { //If object is a css file
                fileref = document.createElement("link")
                fileref.setAttribute("rel", "stylesheet");
                fileref.setAttribute("type", "text/css");
                fileref.setAttribute("href", file);
            }
        }
        if (fileref != "") {
            document.getElementsByTagName("head").item(0).appendChild(fileref)
            loadedobjects += file + " " //Remember this object as being already added to page
        }
    }
}

私が言ったように、コードは ajaxpage() を 1 回だけ呼び出した場合、または異なるイベントを介して複数回呼び出した場合に完全に機能します。複数のインスタンスを dostuff() 関数に入れても、1 つのイベントから複数回は機能しません。

これは本当に私を悪化させ始めているので、どんな助けも大歓迎です。ありがとう。

更新: 代わりに、更新リンクでマウスオーバー、マウスアウトなどの複数のイベントを使用する「回避策」を実行したため、これは緊急ではありません。つまり、必要に応じて機能しますが、決してエレガントではなく、1つのイベント内で複数回呼び出されたときに機能しないのはなぜですか?!

4

1 に答える 1

0

繰り返しているサンプルの26行目と27行目に気づきました。

    page_request.send(null)

続行する前にそれを排除する価値があります。生成されたソースを調べることができるように、これへのライブリンクをどこでも見ることができますか?

于 2012-11-06T19:56:25.243 に答える