时间:2011-02-05 16:37:04

标签: javascript jquery ajax prototypejs

是否有可能通过包含标签的Ajax.request更新元素的innerHTML?

<div><script type="text/javascript">javascript</script></div>

我想用顶部的代码更新div的内容,而不是eval它。

感谢您的帮助。

编辑:

好的,所以它不是那么容易。

我有使用Ajax.request返回表单的主文档,如何在表单加载后使用主文档中的原型函数来操作数据?

编辑:

这是来自Ajax.request响应的按钮

<button onclick="sendForm();" id="submitForm" type="button" class="button"><span><?php echo $this->__('Send email') ?></span></button>

这是来自主文件的JS

new Ajax.Request('/path/another_path/index',
      {
        method:'post',
        evalJS: true,
        onSuccess: function(transport){
            $('sendfriend').update(transport.responseText);
            var productSendtofriendForm = new VarienForm('product_sendtofriend_form');
        }
      });

点击此按钮后,我得到“ReferenceError:找不到变量:productSendtofriendForm”

3 个答案:

答案 0 :(得分:1)

由于您要更新现有元素的内容,因此您可以使用Ajax.Updater并设置evalScripts选项。插入的脚本标记将在Ajax.Updater的范围内进行评估,这意味着它可以访问全局函数,但不能访问启动更新的脚本本地函数。

修改
您希望脚本标记中包含的函数存在于全局范围中。而不是:

function somefunc() { ...

你需要这样做:

somefunc = function() { ...

绝对不要使用var,因为这会阻止somefunc成为全局变量。稍后,当单击一个按钮时,它的onclick事件将在somefunc现在所在的全局范围内执行。

答案 1 :(得分:0)

好文章about experiments with innerHtml and script tags。它不起作用,但如果SCRIPT标签具有DEFER属性,那么它将在IE下工作。

答案 2 :(得分:0)

好的,对不起。

我唯一需要做的就是在Ajax.Request之前声明var productSendtofriendForm ...需要bo全局。