function LoadFoo(selected_foo) {
var foobar = selected_foo.bar;
var head = document.getElementsByTagName('head')[0];
var nextfoo = document.createElement('script');
nextfoo.type= 'text/javascript';
nextfoo.src="foobaz.php?form=foo" + ... + "&foobar=" + foobar; // a php script which reads from MYSQL and generates script that updates selectboxes of the document
head.appendChild(nextfoo) }
在Chrome版本23.0.1271.26,FF 16,IE 9上进行了测试,目前尚无问题。但是我有点担心,因为我以前从未使用过JS,而且它没有在IE6~8上测试过。此外,由于每次执行都会创建更多nextfoo
个对象,这不会有问题吗?我尝试添加head.removeChild(nextfoo);
并删除它,因为它使nextfoo
无法在IE9上运行。
答案 0 :(得分:0)
您当前的代码会创建新的脚本标记,但它不太理想,但它不会导致任何问题(除了可能会在页面中添加数百个脚本标记。将其更改为使用xmlhttp或类似的东西会更好。阅读您的评论我猜你有点坚持你拥有的东西吗?
如果您只是遇到.src属性问题,可以尝试使用setAttribute设置它。
function LoadFoo(selected_foo) {
var foobar = selected_foo.bar;
var head = document.getElementsByTagName('head')[0];
var nextfoo = document.createElement('script');
nextfoo.setAttribute("type", "text/javascript");
nextfoo.setAttribute("src", "foobaz.php?form=foo" + ... + "&foobar=" + foobar);
head.appendChild(nextfoo) }
我不确定你在哪里使用removeChild()位,如果你试图删除你刚刚加载的那个,你就无法将它添加到这个函数中。 (它可能在加载之前删除元素)
您可以删除旧的foo(通过添加ID或其他内容来区分每个脚本标记),但如果您快速加载它们,则可能会遇到删除未加载的ID的相同问题。