Javascript Ajax:rest api调用给出错误:未捕获语法错误:意外标记:

Javascript Ajax:rest api调用给出错误:未捕获语法错误:意外标记:,javascript,ajax,json,.htaccess,rest,Javascript,Ajax,Json,.htaccess,Rest,我试图了解我的代码在使用RESTAPI时遇到了什么问题 我正在使用“EspoCRM”,现在我想开始使用api 在中,他们要求使用:使用基本身份验证,如: "Authorization: Basic " + base64Encode(username + ':' + password) 因此,我尝试使用以下代码: <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></

我试图了解我的代码在使用RESTAPI时遇到了什么问题

我正在使用“EspoCRM”,现在我想开始使用api

在中,他们要求使用:使用基本身份验证,如:

"Authorization: Basic " + base64Encode(username + ':' + password)
因此,我尝试使用以下代码:

<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

<script type="text/javascript" >

    var creds = {
    username: "myuser",
    password: "mypass"
};
var credentials = btoa(creds.username + ":" + creds.password);
$.ajaxSetup({
    xhrFields: { withCredentials: false },
    beforeSend: function (xhr) {
        xhr.setRequestHeader("Authorization", "Basic" + credentials);
        return true;
    }
});

$.ajax({
    url: 'http://crmurl.com/api/v1/App/user',
    type: 'GET',
    dataType: 'jsonp',
    async: false,
    success: function (data) {
        console.log(data);
        var json = JSON.parse(data);
        alert(json.user.userName);
    }
});

</script>
当我点击错误链接时,我可以看到所有的json数据。但是由于这个错误,我无法处理数据。不管我怎么努力

如果我从
dataType:'jsonp'
更改为
dataType:'json'

我得到这个错误:

XMLHttpRequest cannot load http://crmurl.com/api/v1/App/user. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.domain.com' is therefore not allowed access. The response had HTTP status code 401.
我有插件访问权限

<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin: *
</IfModule>

标题集访问控制允许原点:*
json输出为:

{"user":{"id":"1","name":"Admin","deleted":false,"isAdmin":true,"userName":"admin","password":"xNa3PPcGYcIGQJE4gZi4gnEJ1tv9XF1m7F490qTg.yLPG3Y3QtwRWQq.4RicYIro8akEOZXiWnXzuKg4P4Jnx1","salutationName":"","firstName":"","lastName":"Admin","isActive":true,"title":"","emailAddress":"demo@espocrm.com","phoneNumber":"+44(203)695-03-80","createdAt":"2015-07-11 05:03:05","defaultTeamId":null,"defaultTeamName":null,"teamsIds":[],"teamsNames":{},"avatarName":null,"avatarId":null},"acl":{"table":{"Email":{"read":"all","edit":"all","delete":"no"},"EmailAccountScope":true,"EmailTemplate":{"read":"all","edit":"all","delete":"no"},"Account":{"read":"all","edit":"all","delete":"no"},"Calendar":true,"Call":{"read":"all","edit":"all","delete":"no"},"Campaign":{"read":"all","edit":"all","delete":"no"},"Case":{"read":"all","edit":"all","delete":"no"},"Contact":{"read":"all","edit":"all","delete":"no"},"Document":{"read":"all","edit":"all","delete":"no"},"DocumentFolder":{"read":"all","edit":"all","delete":"no"},"Lead":{"read":"all","edit":"all","delete":"no"},"Meeting":{"read":"all","edit":"all","delete":"no"},"Opportunity":{"read":"all","edit":"all","delete":"no"},"TargetList":{"read":"all","edit":"all","delete":"no"},"Task":{"read":"all","edit":"all","delete":"no"},"User":{"read":"all","edit":"no","delete":"no"},"Team":{"read":"all","edit":"no","delete":"no"},"Note":{"read":"all","edit":"own","delete":"own"},"EmailAddress":{"read":"no","edit":"no","delete":"no"},"PhoneNumber":{"read":"no","edit":"no","delete":"no"},"EmailAccount":{"read":"own","edit":"own","delete":"own"},"Role":false},"assignmentPermission":"all","userPermission":"no"},"preferences":{"id":"1","timeZone":"UTC","dateFormat":"MM\/DD\/YYYY","timeFormat":"HH:mm","weekStart":0,"thousandSeparator":",","decimalMark":".","defaultCurrency":"USD","dashboardLayout":[{"name":"My Espo","layout":[[{"name":"Stream","id":"d4"},{"name":"SalesByMonth","id":"d11"},{"name":"SalesPipeline","id":"d12"}],[{"name":"Tasks","id":"d3"},{"name":"OpportunitiesByLeadSource","id":"d14"},{"name":"OpportunitiesByStage","id":"d15"}]]}],"dashletOptions":null,"smtpServer":"","smtpPort":25,"smtpAuth":false,"smtpSecurity":"","language":"es_ES","exportDelimiter":";","receiveAssignmentEmailNotifications":true,"autoFollowEntityTypeList":[],"signature":"<br>","defaultReminders":[]},"token":null}
{“user”:{“id”:“1”,“name”:“Admin”,“deleted”:false,“isAdmin”:true,“userName”:“Admin”,“password”:“xNa3PPcGYcIGQJE4gZi4gnEJ1tv9XF1m7F490qTg.ylpg3y3qtwrqq.4ricyiro8akeziwnxzukg4pjnx1”,“问候名”:“firstName”:“Admin”,“isActive”:true,“title”:“emailAddress”:”demo@espocrm.com,“电话号码”:“+44(203)695-03-80”,“创建数据”:“2015-07-11 05:03:05”,“defaultTeamId”:null,“defaultTeamName”:null,“teamsNames”:[],“teamsNames”:{},“avatarName”:null,“acl”:{“table”:{“Email”:{“read”:“all”,“edit”:“all”,“delete”:“no”},“EmailAccountScope”:true,“EmailTemplate”:{“read”:“all”,“edit”:“all”,“edit”:“all”:“all”,“delete”:“no”;“Calendar”:“true,“呼叫:{read:“all”,“edit:”“all”,“delete:”“no”},活动:{“read:”“all”,“edit:”“all”,“delete:”“no”},案例:{“read:”“all”,“edit:”“all”,“delete:”“no”},联系人:{“read:”“all”,“edit:”“all”,“delete:”“no”},文档文件夹:{“read:”“all”,“edit:”“all”,“edit:”“no”},Lead:{“read:”“all”,“edit:”“all”,“edit:”“all”删除“:”无“}”,会议“{”读“:”全部“,”编辑“:”全部“,”删除“:”无“}”,机会“{”读“:”全部“,”编辑“:”无“}”,目标列表“{”读“:”全部“,”编辑“:”全部“,”删除“:”无“}”,用户“{”读“:”全部“,”编辑“,”团队“{”读“:”全部“,”编辑“,”无“,”删除“,”无“,”注“{”读“,”全部“,”编辑“,”全部“,”无“,”编辑“,”团队“,”无“,”“:”own“,”delete“,”own“,”EmailAddress“,”阅读“,”编辑“,”否“,”电话号码“,”阅读“,”否“,”编辑“,”否“,”EmailAccount“,”阅读“,”编辑“,”own“,”删除“,”own“,”角色“:”false“,”分配权限“:”所有“,”用户权限“,”否“,”首选项“,”{”id“:”1”,“时区“,”UTC“,”日期格式“:”MM\/DD\/YYYYYY“,”时间格式“:”HH:MM”,“weekStart”:0,“千位分隔符”:“,”,“小数点”:“,”defaultCurrency”:“USD”,“仪表盘布局”:“{”name:“My Espo”,“布局”:“[{”name:“Stream”,“id:“d4”},{”name:“SalesByMonth”,“id:“d11”},{”name:“SalesPipeline”,“id:“d12”}],{”name:“任务”,“id:“d3”},{”name:“OpportunitiesByLeadSource”,“id:“d14”;“name:“OpportunitiesByStage”,“id:“d15”}],“dashletOptions”:null,“smtpServer:”,“smtpPort:”25,“smtpAuth:”false,“smtpSecurity:”,“language:”es_es”,“exportDelimiter:”,“receiveAssignmentEmailNotifications:”true,“AutoFollowerEntityTypeList:”,“signature:“
”,“DefaultMembers:”,“[]},“token:”null}
当您使用JSON进行调用时,您的访问被拒绝,因为CORS标头不存在。因此您会收到错误

XMLHttpRequest cannot load http://crmurl.com/api/v1/App/user. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.domain.com' is therefore not allowed access. The response had HTTP status code 401.
这解释了第二个错误。现在,由于CORS不存在,JSONP是获取数据的唯一方法,它添加了CORS头

您从AJAX回调中获得的数据是JSON本身。您无法解析JSON数据,因为
parse
本身返回JSON数据。因此不需要以下代码

JSON.parse(data);
分配

var json = data;

或者直接使用
data
。这将解决您的第一个错误。

问题在于错误,而不是数据。如果我使用jsnop,我会得到这个错误:
Uncaught SyntaxError:意外标记:
如果我使用json,我会得到这个错误:
XMLHttpRequest无法加载http://crmurl.com/api/v1/App/user. 无“访问控制允许来源”标题请求的资源上存在。源'http://www.domain.com因此,不允许访问。响应的HTTP状态代码为401。
问题仅限于数据。当您使用JSON时,由于CORS,服务器基本上不允许您访问。当您使用JSONP时,服务器允许数据,因此您可以获得数据。但由于数据本身就是JSON,因此你无法再次解析问题是他描述了两个不同的错误,你已经回答了第一个错误的原因,但他似乎认为你已经回答了第二个错误的原因:pOK,让我为他重新表述我的答案:)如果我这样做,第一个错误仍然会出现:
success:function(data){//console.log(data);}
您说您在htaccess中添加了CORS头,是在crmurl.com服务器上吗?@JaromandaX是的,我在
crmurl.com
中将其添加到.htaccess中,然后我得到以下错误:
XMLHttpRequest无法加载http://mycrm.com/api/v1/App/user. 当凭据标志为true时,不能在“Access Control Allow Origin”标头中使用通配符“*”.原产地'http://www.domain.com因此,不允许访问。
没错,在处理授权COR时,您必须非常聪明-坚持原始jsonp实现,该实现已在下面的答案中为您解决
var json = data;