【问题标题】:JSON jQuery issue: Uncaught SyntaxError: Unexpected token :JSON jQuery 问题:Uncaught SyntaxError: Unexpected token :
【发布时间】:2012-08-10 20:42:34
【问题描述】:

我正在编写一个 jQuery 调用来从 memegenerator.net API 检索 JSON 数据。但是,使用下面的代码,每当我在 Chrome 中测试它时,都会收到 Uncaught SyntaxError: Unexpected token : 错误。我尝试删除回调=?这引发了另一个错误。

每当我直接访问该 URL 时,它都可以正常返回。

JSFiddle 中的 JSLint 将返回的 JSON 声明为有效。

关于如何使这次通话成功的任何想法?

<script>
$(document).ready(function() {
    $.ajax({
        type: 'GET',
        url: 'http://version1.api.memegenerator.net/Instances_Select_ByNew?languageCode=en&pageIndex=0&pageSize=12&urlName=Insanity-Wolf?callback=?',
        dataType: 'json',
        success: function() {
            console.log('Success!');
        },
        error: function() {
            console.log('Uh Oh!');
        }
    });
});​      
</script>

【问题讨论】:

    标签: jquery json


    【解决方案1】:

    由于浏览器安全限制,大多数“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议中成功检索数据。你需要jsonp。

    【讨论】:

      【解决方案2】:

      该 api 要么不支持 JSONP,要么正在寻找与 callback 不同的回调参数。

      另外,你的网址应该是

      http://version1.api.memegenerator.net/Instances_Select_ByNew?languageCode=en&pageIndex=0&pageSize=12&urlName=Insanity-Wolf&callback=?
      

      注意&amp; 而不是?

      另外,dataType 应该是"jsonp"

      【讨论】:

        【解决方案3】:

        听起来像是跨域错误。如果不使用 jsonp 或服务器上的代理脚本,您就不能使用 ajax 从域以外的域请求内容。 (如果使用 php,它将是 cURL request

        ajax docs page上寻找jsonp

        cURL 请求:

        $cURL = curl_init();
        curl_setopt($cURL, CURLOPT_URL, 'http://version1.api.memegenerator.net/Instances_Select_ByNew?languageCode=en&pageIndex=0&pageSize=12&urlName=Insanity-Wolf');
        curl_setopt($cURL, CURLOPT_HEADER, 0 );
        curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, false );
        curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec($cURL);
        curl_close($cURL);
        echo $output;

        【讨论】:

        • memegenerator 似乎没有提供 jsonp 或 CORS 标头(这将允许跨域 ajax 正常工作)。
        • 所以你需要在你的服务器上调用一个脚本,该脚本向该 url 发出 cURL 请求,然后返回。
        • 我不是操作员,只是想指出 您不能使用 ajax 从域以外的域请求东西 是错误的:P
        • 嗯,你停止阅读我的回答了吗?这就是我所拥有的?哈哈,我很关注你……
        • 不,我的意思是,你所拥有的是错误的。您可以使用 ajax 从域以外的域请求内容,而无需使用代理或 jsonp。
        猜你喜欢
        • 2011-12-17
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多