跨域的Javascript请求

时间:2013-02-14 14:51:59

标签: javascript

我正在尝试跨域这样的请求:

    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>"}

1 个答案:

答案 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>"})

More about JSONP here.