Javascript 对ajax脚本的多次调用不起作用

Javascript 对ajax脚本的多次调用不起作用,javascript,ajax,javascript-events,Javascript,Ajax,Javascript Events,好的,所以我对ajax的所有东西都很陌生(实际上不到几天),但这是我为我的雇主构建表单所必需的 基本上,无论我做什么,它都不能用于超过1个函数。更详细地说,我尝试使用“onchange”在一个下拉列表的基础上更新页面的4个不同部分。现在更新1部分工作正常,更新任何超过1部分的部分都会失败…但不仅失败,如果我确实调用ajax部分,那么它也会失败,然后只是一个简单的警报…但是如果我首先使用警报进行操作,它会工作,然后如果我在ajax调用之后放置任何内容,它会再次失败。我希望这是有道理的。例如,如果我

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

基本上,无论我做什么,它都不能用于超过1个函数。更详细地说,我尝试使用“onchange”在一个下拉列表的基础上更新页面的4个不同部分。现在更新1部分工作正常,更新任何超过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(){
ajaxpage('admincludes/popoptions.php?pID=&pType='+pType.value,'options');
警报(“测试”);
}
…这就是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
        }
    }
}
var bustcachevar=1//bust初始请求后外部页面的潜在缓存?(1=是,0=否)
var loadeobjects=“”
var rootdomain=“http://”+window.location.hostname
var bustcacheparameter=“”
函数ajaxpage(url,容器ID){
var page_请求=false
if(window.XMLHttpRequest)//if Mozilla、Safari等
page_request=newXMLHttpRequest()
else if(window.ActiveXObject){//if IE
试一试{
page_request=newActiveXObject(“Msxml2.XMLHTTP”)
}捕获(e){
试一试{
page_request=newActiveXObject(“Microsoft.XMLHTTP”)
}捕获(e){}
}
}否则
返回错误
page_request.onreadystatechange=函数(){
loadpage(请求页,集装箱ID)
}
if(bustcachevar)//外部页面的if-bust缓存
bustcacheparameter=(url.indexOf(“?”)=-1)?“&”+新日期().getTime():“?”+新日期().getTime()
页面请求。打开('GET',url+bustcacheparameter,true)
页面_请求发送(空)
页面_请求发送(空)
}
函数加载页(请求页,容器ID){
if(page_request.readyState==4&&(page_request.status==200 | window.location.href.indexOf(“http”)=-1))document.getElementById(containerid).innerHTML=page_request.responseText
}
函数loadobjs(){
如果(!document.getElementById)返回
对于(i=0;i
正如我所说,当只调用一次ajaxpage()或通过不同的事件多次调用ajaxpage()时,代码工作得非常完美。它不会在一个事件中多次工作,即使将多个实例放入dostuff()函数中也是如此

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


更新:这不像我做的“变通”那样紧急,它在更新链接上使用多个事件,例如mouseover、mouseout等。这意味着它可以按我需要的方式工作,但无论如何它都不优雅,我仍然很好奇为什么在一个事件中多次调用它时它不会工作

我注意到您在样本的第26行和第27行重复:

    page_request.send(null)

值得在你继续之前消除它。我们可以在任何地方看到这个的实时链接,这样我们就可以检查生成的源代码了吗