Edw*_*uay 3 javascript php ajax extjs eval
我正在编写一个PHP框架,它允许PHP开发人员使用PHP类创建带有表单,网格,tabpanel和菜单的ExtJS接口.
为了创建一个的TabPanel,例如,PHP类被实例化与网址的阵列,其获得动态加载,当用户点击一个标签报头.
为了做到这一点,我使用以下Javascript函数,它通过AJAX调用加载PHP页面并执行其中的任何脚本.
function loadViewViaAjax(url) {
Ext.Ajax.request({
url: url,
success: function(objServerResponse) {
var responseText = objServerResponse.responseText;
var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
while(scripts=scriptsFinder.exec(responseText)) {
eval(scripts[1]);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我经常看作为这个问题的答案,有通常不需要使用eval() ,因为你需要的eval做什么()可以通常可以在其他方式来实现.我也理解在通过AJAX加载的PHP页面中执行脚本会带来安全风险,需要以其他方式锁定,所以我想找到另一种更安全的方法来做到这一点.
什么是动态加载,并从服务器没有的eval(执行JavaScript)的另一种方式,让我有相同的功能我用上面的脚本现在要做的,即TabPanels其负载从服务器执行JavaScript只有当标签点击标题?
您始终可以通过脚本注入加载其他Javascript.如果您创建一个新的SCRIPT元素并将其放在DOM中,浏览器将下载该脚本并执行它.作为简化示例,您可以使用此:
var newScript = document.createElement('script');
newScript.setAttribute('src', 'http://www.example.com/url/of/your/script.php');
document.body.appendChild(newScript);
Run Code Online (Sandbox Code Playgroud)
如果您想要更安全的方法,我建议研究"JSONP".