文档.写jsonp回调
document.write in jsonp callback
我正在使用脚本标记hack和jsonp进行跨域请求。在回调函数中,我想使用document.write()
将接收到的数据写入DOM。
我知道我应该使用appendChild/innerHTML代替doc.write()
。我的约束是我没有一个类/id挂钩到我想写的元素。我只能依靠document.write()
来写"在适当的地方"。
下面的代码包含在script标签的HTMLdiv中:
function request_jsonp(){
var script = document.createElement('script');
var server_path = 'http://somedomain.com/?q=querystring&callback=request_callback';
script.setAttribute('src', server_path);
document.getElementsByTagName('head')[0].appendChild(script);
console.log('data requested');
// document.write('hello world'); // this gets written
}
function request_callback(data){
console.log('data received');
document.write(data);
}
request_jsonp();
window.onload = function(){
console.log('onload fired');
}
/*
above code prints
data requested
data received
onload fired
*/
基本上document.write
不工作,即使在回调函数内的静态字符串。我认为如果document.write
在onload
之前被调用,它会在页面中插入文本,如这里所述JavaScript和HTML脚本标签
是什么阻止document.write()
写DOM?还有,是否有更好的方法来做到这一点?
您应该注意到document.write();
调用隐式document.open();
,因此,实际上清除了到目前为止文档中的所有内容。使用document.write();
添加内容到文档是不可能的。但是,可以使用document.write();
来编写整个文档。
你有几个可能的解决方案:
- 您可以将目标元素作为GET参数传递,正如@kirilloid所指出的。
- 您可以在需要的位置插入IFrame对象,并使用
myIFrame.document.write();
更新其内容。
这基本上是因为您正在更新一个容器的内容,该容器是脚本代码的父容器,因此尚未关闭。
要么是这样,要么就是我完全偏离了轨道,让我们面对现实吧,这完全有可能。: -)
相关文章:
- 成功回调永远不会被JSONP请求调用
- 如何在原生 JavaScript Promise 中包装 jsonP 回调
- 在回调返回错误中带有点的 JSONP
- 在带有数据的iframe中的JSONP中没有回调
- jQuery JSONP 不调用回调
- http.jsonp 和 JavaScript 中的回调
- 如何在 jsonp 回调中返回跨域 html
- “(回调方法)未定义”在 Firefox 插件上的 JSONP 访问中
- 当无法定义回调时使用angularjs JSONP
- 使用 jQuery $.ajax 的 JSONP 响应/回调不起作用
- 使用 jsonp 和 php 返回回调
- Jquery jsonp 请求回调函数未触发
- JSONP 和回调函数名称
- JSONP 回调顺序不对
- jsonp 回调(stripe.js)中延迟承诺的 Karma 单元测试
- 清理 jsonp 回调的最佳方法
- JSONP回调-当使用jQuery调用时,数据到达时未被捕获
- AngularJS http.jsonp回调未定义
- 没有用jQuery调用jsonp回调函数
- 从Safari扩展创建JSONP回调