使用js和原型从Ajax调用返回的处理难度很大

时间:2019-06-23 14:35:16

标签: javascript ajax prototypejs

我正在尝试在ul中插入一个包含一个选择的li,并将其与通过Ajax从数据库获得的选择的选项中的数据一起使用。

事先为您的歉意...

几年前,我从Web开发中退休,在后来的几年中,我大量使用了Prototype。我现在有些生锈,但是我正在尝试做一些纯粹用于个人用途的开发。它不会在开放的Web上,而仅在我们的本地服务器上。一切都进行得很好(如果很慢!),但是现在我已经用Ajax撞墙了。

这就是我想要做的:

  • 我有一个带有一个或多个选择的表单,每个选择都在自己的li内,都在一个ul中。

  • 每个选择都包含来自MySQL数据库中表的相同项目列表。

  • 最后一个选择未选择任何内容,并且具有“ addselect”类。

  • 的想法是,如果我从最后一个选择中选择了某个内容,则会触发一个onChange事件,该事件将调用Ajax脚本以添加一个新选择(包含相同的项)。这是在页面加载时在javascript文件顶部的“ document.observe('dom:loaded',function()...”)中设置的。

  • 每个选择都有一个顺序名称和ID,例如'name =“ country [0]” id =“ country_0”',下一个国家[1]和country_1,依此类推。新创建的选择将按顺序具有下一个名称和ID。 我希望一切都有意义。

所以... 在“ dom:loaded ...”中设置的处理函数获取下一个索引号,以获取新选择的名称和ID,并将其(“ entryindex”)和要搜索的表的名称(“ list”)发送出去到Ajax脚本,然后开始:

var pars = 'list=' + list + '&entryindex=' + newIndex;
var url = base + 'ajaxgetmenu';

// send request to do the business
var myAjax = new Ajax.Request (url, {
    method: 'post',
    parameters: pars,
    onSuccess: function (req) {
        var xml = req.responseText;
        ...

到目前为止,一切都是笨拙的。 Safari的Web检查器中的“资源”选项卡在“ XHRs”下显示了正确的结果-具有正确名称和内容的不错的新选择。因此,我知道脚本正在被调用并且正在正确运行。但是接下来要发生的事情是

        var newhtml = xml.getElementsByTagName('newhtml')[0].firstChild.nodeValue;

这取自我在职业生涯中开发的脚本,我知道它工作得很好。但是这里有些问题,因为它不起作用!如果我在此行之前在('ok')中添加了警报,则会弹出警报,但是如果我在此行之后将其弹出,则不会。但是,没有错误报告。当然,下一行也不起作用:

        $('thisid').up('ul').insert (newhtml);

(而且我知道“ $('thisid')”是正确的,因为我将其放在警报中进行了检查。)

所以我简化了它。我放弃了XML,而是将结果制成纯文本,以逐字插入。同样,该脚本在Safari的Web检查器中产生了完美的结果,但是即使newhtml是纯文本(并且我完全跳过了xml.getElementsByTagName行),它也会失败。再一次,插入行之前的警报起作用,但插入行之后的警报没有起作用。确实,我可以将newhtml放到警报中,并且显示正确(不是所有这些都在Safari中,我猜它太长了,但是在Firefox中就全部存在了。)

我已尽我所能,所以,如果有人对此有任何见识,我将非常感激。可能是死死的东西明显地盯着我...

回应卑鄙:

因为我要执行的操作不起作用,所以执行前后DOM都没有变化。这是相关的位:

<ul id="country">
    <li><label>Countries:</label>
        <select class="finput addselect" name="country[0]" id="country_0">
            <options...
        </select>
    <li><label></label>
        <select class="finput addselect" name="country[1]" id="country_1">
            <options...
        </select>
    </li>
</ul>

onChange适用于#country_1,并且应该在此之后插入新的选择,所以up('ul')应该这样做吧?我尝试了(1),但还是没有用。我尝试只插入“测试”,但没有用...

0 个答案:

没有答案