跨域Ajax失败 - 没有调用回调的parseerror

时间:2016-11-17 09:12:24

标签: jquery ajax cross-domain jsonp

我设置了一个ajax需要跨域,一些 API 工作没有任何错误,但有些返回parserror
我无法弄清楚为什么会发生这种情况以及如何解决它,希望任何人都可以给我一些指导,谢谢。

这是我的代码:

// After OAuth2 to get the token
$.ajaxSetup({
    dataType: 'jsonp',
    statusCode: {
        401: function() {
            window.open('page for oauth2');
        }
    }
});

$.ajax({
    url: 'https://redbooth.com/api/3/me',         // this one work without problem
    method: 'GET'
})
.done(function( data, textStatus, jqXHR ) {
    alert('success');
});

$.ajax({
    url: 'https://redbooth.com/api/3/projects?order=id&archived=false',
    method: 'GET'
})
.done(function( data, textStatus, jqXHR ) {
    alert('test');
})
.fail(function( jqXHR, textStatus, errorThrown ) {
    // this API will throw error
    // jqXHR: status = 200, readyState = 4, statusText = "load"
    // textStatus: parserror
    // errorThrown: xxx was not called
    var test = 1;
});

我已经从他们的控制台和fiddler中检查了返回值:

  

[{ “类型”: “项目”, “created_at”:0 “的updated_at”:0, “ID”:0, “永久”: “测试1cc1c3”, “的organization_ID”:0, “归档” :假的, “名”: “测试”, “说明”:空, “起始日期”:空, “END_DATE”:空, “tracks_time”:假的, “公”:真实的, “publish_pages”:假, “设置” :{}, “USER_ID”:0, “已删除”:假 “last_goal_user_id”:0}]

请注意我在这里修改了值,只需将这些id替换为0

我尝试验证 JSON验证器中的返回值或使用$.parseJSON('return value'),两者都可以毫无问题地返回JSON对象。

我试过以下:
- I am getting a json parse error on a cross-domain ajax call not sure how to get rid of the issue
- 设置'jsonp': false
- 设置'dataType': 'text',导致跨源问题 - 设置'dataType':'text,'crossDomain':true,仍然是跨源问题

1 个答案:

答案 0 :(得分:0)

如果jsonp不工作,你可以尝试从服务器调用url,而不是尝试从javascript / ajax。

$.ajax({
    url : 'proxy.php',
    data: {url :'https://redbooth.com/api/3/projects?order=id&archived=false'},
    method: 'GET'
})
.done(function( data, textStatus, jqXHR ) {
    alert('test');
})

<强> proxy.php

<?php
if(isset($_POST['url']) and !empty($_POST['url'])) {
$data = file_get_contents($_POST['url']);
print $data;
}
?>