1
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另外,由于每次执行都会创建更多对象,这不会有问题吗?我尝试了appeding head.removeChild(nextfoo);,并放弃了它,因为它nextfoo无法在IE9上运行。

4

1 回答 1

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 或其他东西来区分每个脚本标签),但如果您快速加载大量它们,您可能会面临删除未加载的相同问题。

于 2012-10-25T20:00:18.603 回答