是否可以使用从jsonp调用返回的“坏”数据?

时间:2014-02-14 22:56:01

标签: javascript jquery ajax json

我有一个jsonp调用另一个获取数据的域,但它只是json,没有包含在函数中。因此,它会出现一个parserror错误。但是,数据就在那里 - 我可以看到它。

即使出现此错误,是否可以使用返回的数据?基本上,我可以以某种方式将错误数据输入变量吗?

基本电话:

$.ajax({
    type: 'GET',
    url: api_url,
    jsonpCallback: 'jsonCallback',
    dataType: 'jsonp',
    success: function(json) {
        console.log('success');
        console.log(json);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log("error: " + textStatus);
    }
});

错误:Uncaught SyntaxError: Unexpected token :

检查错误(在chrome中)显示有效的json,但不显示jsonp ...

1 个答案:

答案 0 :(得分:1)

您可以在调试工具中看到JSON数据,但除非格式正确,否则无法在代码中访问它。 JSONP的工作原理是在您的网页<script>中添加<head>标记。这就是它绕过同源政策的方式。 JSONP不是JSON,它只是一个JavaScript文件;一个函数调用。如果它没有包含在函数调用中,那么它不是JSONP,也不能这样使用。

您使用的服务器需要支持JSONP才能使用他们的数据跨域。看看他们是否支持CORS,如果他们这样做,那么你可以试试。

如果服务器不支持任何跨域技术(JSONP或CORS),那么您唯一的另一个选择是在您自己的webhost上创建一个脚本作为代理。对服务器进行AJAX调用,并让它重新传回JSON数据。