Javascript Prototype Event.observe看不到AJAX返回的HTML

Javascript Prototype Event.observe看不到AJAX返回的HTML,javascript,ajax,dom,prototypejs,extend,Javascript,Ajax,Dom,Prototypejs,Extend,我正在尝试使用Prototype的库创建一个基于AJAX的CMS系统。在页面加载时,我有HTML、页面标题和通过JSON返回的页面的附加Javascript,并在主区域更新HTML。我还有一个事件监听器,它监听要单击的特定ID 听众在工作 var TabMenu = { selectedTab: 'main', showTab: function(pid) { alert(pid); alert($(pid)); $(pid).addClassName('selected'); thi

我正在尝试使用Prototype的库创建一个基于AJAX的CMS系统。在页面加载时,我有HTML、页面标题和通过JSON返回的页面的附加Javascript,并在主区域更新HTML。我还有一个事件监听器,它监听要单击的特定ID

听众在工作

var TabMenu = {
selectedTab: 'main',
showTab: function(pid) { alert(pid); alert($(pid)); 
    $(pid).addClassName('selected'); this.selectedTab = pid;
    $(this.defaultTab).removeClassName('selected');
}};
加载后,我单击一个新选项卡,第一个“测试”警报成功地警告元素的ID,但第二个警报($(pid))返回null。我只能推测AJAX请求返回的HTML没有被计算并添加到DOM中,否则它会向[HtmlDevice]发出警报,而不是“null”

以下是相关的AJAX调用:

        new Ajax.Request(url, {
        onSuccess: function(t) {
            data = t.responseText.evalJSON();
            Page.update(data.html, data.title, data.js);
            Page.destroyLoader();
        }
    });
以下是更新功能:

update: function(data, title, js) {
    document.title = Global.title + title;
    if (title != "") { $('HEADING').update(title); }
    $('MAIN').update(data);
    if (js != "") {
        var nuJS = new Element('script', { type: 'text/javascript' }).update(js);
        $('MAIN').insert({ top: nuJS });
    }
}

关于如何使其工作,有什么想法吗?

何时触发ajax请求?单击该选项卡时是否会触发?如果是这样,则在将数据插入DOM之前会触发
showTab
函数

如果您有firebug,请在ajax调用完成后,尝试使用控制台选择html数据,以查看您得到了什么。您还可以使用firebug的html选项卡查看数据是否已插入DOM


此外,即使您获得设置为值的
pid
参数,它是否引用DOM中存在的真实id?

来自您的代码和上面的注释。 我认为您的计划是在页面加载后立即加载所有选项卡。 并使用css隐藏所有这些内容。等待用户单击该选项卡, 只显示“选中”的一个,对吗

这意味着你应该改变:

$('MAIN').update(data);
差不多

$('MAIN').update({after: data});
所以它不会覆盖现有的。 不要忘记将document.title和eval js的代码移动到showTab函数中

对于javascript评估,您可以将js插入data.html中,并改为使用:

$('MAIN').innerHTML.evalScripts();

当用户加载页面(模拟框架集的右侧)时,会触发AJAX请求。构建页面时,javascript就在那里,选项卡也被加载。从理论上讲,我应该能够通过他们的ID调用标签。根据Firebug的说法,数据已经插入到DOM中。最后一个问题。。。“pid”参数确实会通知ID。@mike如果发出通知(document.getElementById(pid))会发生什么;即使alert(pid)产生一个值,您确定DOM中存在相同的id吗?