1

我正在尝试跨域发出请求:

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

1 回答 1

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

更多关于 JSONP 的信息在这里。

于 2013-02-14T14:55:21.180 回答