我正在尝试跨域这样的请求:
var script=document.createElement('script');
script.setAttribute('src',"http://www.example.com/wordpress/register/?callback=callbackF&ver=2.5&url="+encodeURIComponent(window.location.href));
script.setAttribute("type", "text/javascript");
script.setAttribute("id", "spark_grazit_script");
document.getElementById("spark_static_widget").parentNode.appendChild(script);
随着脚本的创建,它将被附加到我拥有的div,并且会有一个请求。在请求结束时:
function callbackF(data){
console.log('Response has finished'+data);
}
该功能应在请求结束时触发。我想要的只是调用回调函数。
我没有收到跨域错误。但是我得到了这个错误:
Uncaught SyntaxError: Unexpected token :
有没有办法实现我想要的,而不需要使用html5或jsonp。我能以某种方式得到ajax的回复吗?
更新 响应是一个简单的json对象
这是回复:
{ "userid":"24645", "token":"40A164ECA4DE4A4F", "script":"<script type='text/javascript'>var dbnwid=16211; var dbnpid=23113; var dbnwebid=19459; var dbnlayout=21; var dbncolor='#000000'; var dbntitlefontsize='14'; var dbnbgcolortype=1; var dbnheader='You might enjoy reading:'; var dbnremindercolor=2; var dbn_protocol = (('https:' == document.location.protocol) ? 'https://' : 'http://'); </script>"}
答案 0 :(得分:2)
有没有办法实现我想要的,而不需要使用html5或jsonp。我能以某种方式得到ajax的回复吗?
您使用 ajax。你正在做JSONP(或功能相同的东西)。
http://www.eya.com/wordpress/register/?callback=callbackF&ver=2.5&url=
的响应必须是有效的脚本片段。从您的错误消息来看,它不是。 (当我尝试它时我得到的是404页面,这往往是一个无效的脚本。)
更新:您的响应是一个有效的JSON对象,但不是有效的JavaScript片段,因为开头{
看起来像一个块的开头而不是一个对象文字的开头到解析器,因为它不会出现在预期表达式的位置。
为了使其按照您描述的方式工作(是 JSONP),响应必须将该对象包装在对URL中指定的回调的调用中,如下所示:
callbackF({ "userid":"24645", "token":"40A164ECA4DE4A4F", "script":"<script type='text/javascript'>var dbnwid=16211; var dbnpid=23113; var dbnwebid=19459; var dbnlayout=21; var dbncolor='#000000'; var dbntitlefontsize='14'; var dbnbgcolortype=1; var dbnheader='You might enjoy reading:'; var dbnremindercolor=2; var dbn_protocol = (('https:' == document.location.protocol) ? 'https://' : 'http://'); </script>"})