我们正在使用Prototype来处理所有Ajax请求,为了简单起见,我们使用以下函数将HTML内容简单地呈现给相应的div:
function ajaxModify(controller, parameters, div_id) { var div = $(div_id); var request = new Ajax.Request ( controller, { method: "post", parameters: parameters, onSuccess: function(data) { div.innerHTML = data.responseText; }, onFailure: function() { div.innerHTML = "Information Temporarily Unavailable"; } } ); }
但是,我偶尔需要在HTML响应中执行Javascript,并且此方法似乎无法执行此操作.
我试图将Ajax调用的函数列表保持在最低限度,原因有很多,所以如果有一种方法可以修改现有的函数而不会破坏当前正在使用的任何地方或者修改HTML响应的方法将导致任何嵌入式JavaScript执行,这将是伟大的.
值得注意的是,我已经尝试在函数中加入"evalJS:'force'"来查看它会做什么,而且它没有任何帮助.
参数是:
evalScripts:true
请注意,您应该使用Ajax.Updater,而不是Ajax.Request
请参阅:http://www.prototypejs.org/api/ajax/updater
如果响应头是:Ajax.Request将只处理JavaScript:
application/ecmascript,application/javascript,application/x-ecmascript,application/x-javascript,text/ecmascript,text/javascript,text/x-ecmascript,text/x-javascript
而Ajax.Updater将处理JS是evalScripts:true设置.Ajax.Request适用于数据传输,例如获取JSON响应.
由于您正在更新HTML,因此您应该使用Ajax.Updater.