0

设想

页面调用此 url 上可用的远程脚本:http://url.to.script/myScript?ScriptParamsList。让我们假设:

  • 不需要异步执行。
  • 不需要显示输出。
  • 该脚本在按钮单击事件上调用。让 Handler() 成为 javascript 事件处理程序:

    function Handler() { //invoke the remote script }

有几种方法可以实现 Handler() 函数:

  • 脚本与 img 标签

document.write('<script src="http://url.to.script/myScript?ScriptParamsList" type="text/javascript"></script>');

document.write('<img src="http://url.to.script/myScript?ScriptParamsList" />');

  • jQuery .html() 与 .load()

$('#TargetDiv').html('<img src="http://url.to.script/myScript?ScriptParamsList" />');

$('#TargetDiv').load('http://url.to.script/myScript?ScriptParamsList');

问题

有哪些优点和缺点?

4

1 回答 1

1
  • document.write在加载文档后调用它时将替换您当前的文档。永远不要使用这种方法。
  • 使用<script>允许您从外部域获取请求,而不会受到同源策略的阻碍。此外,在服务器的响应中,您可以添加和执行 JavaScript,这可能很有用。
  • .html('<img ...>')除非您的服务器返回包含有意义数据的图像,否则使用没有意义。如果您打算仅触发服务器请求,则以下内容会更好:

    new Image().src = 'http://url.to.script/myScript?...';
    
  • $('..').load如果 URL 位于不同的域中,则由于相同的源策略而无法正常工作。

我投票赞成该new Image().src = '..';方法。如果您不喜欢这种语法,并且想要更多 jQuery,请使用:

$('<img>').attr('src', 'http://...');

注意:结果可能会被缓存。如果您不希望这种情况发生,请附加一个随机查询字符串,以破坏缓存(例如。url = url + '&_t=' + new Date().getTime())。

于 2012-07-18T14:11:56.510 回答