我设置了一个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
,仍然是跨源问题
答案 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;
}
?>