是否有可能通过包含标签的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”
答案 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全局。