1

好的,所以我对所有 ajax 都非常陌生(实际上不到几天),但这是我为我的雇主构建的表单所必需的。

基本上,无论我做什么,它都不能用于超过 1 个功能。详细地说,我正在尝试使用“onchange”基于一个下拉菜单更新页面的 4 个不同部分。现在更新 1 部分工作正常,更新任何更多失败......但不仅失败,它也会失败,例如,如果我调用 ajax 部分,那么只是一个简单的警报......但如果我用警报来做首先它起作用,然后如果我在 ajax 调用之后放任何东西,它就会再次跌倒。我希望这是有道理的。例如,如果我这样做,它也可以工作。onchange 和 onblur 在同一个元素上,它会执行两次。我将发布代码,然后希望它会更有意义,而不是我喋喋不休地大声笑。

<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 最棒的,因为我从来没有真正需要过它只是在我需要的时候学到了我需要的东西。

    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() 一次或通过不同事件多次调用时完美运行,即使将多个实例放入 dostuff() 函数,它也不会从一个事件多次运行。

任何帮助将不胜感激,因为这真的开始让我更加恼火。谢谢。

更新:现在这不像我做了一个“解决方法”那样紧急,它在更新链接上使用多个事件,如鼠标悬停、鼠标悬停等。这意味着它可以按我的需要工作,但是无论如何它都不优雅,我仍然很想知道为什么在 1 个事件中多次调用它时它不起作用?!

4

1 回答 1

0

我注意到您重复的示例的第 26 行和第 27 行:

    page_request.send(null)

值得在继续之前消除它。我们可以在任何地方看到一个实时链接,以便我们可以检查生成的源吗?

于 2012-11-06T19:56:25.243 回答