[英]Ajax: rest api call give error: Uncaught SyntaxError: Unexpected token :
我試圖了解我的代碼與REST API一起工作的問題
我正在使用“ 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>
使用此代碼后,我在控制台中得到錯誤:
Uncaught SyntaxError: Unexpected token :
當我單擊錯誤鏈接時,我可以看到所有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.
我在htaccess中添加了
<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}
當您使用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
。 這將解決您的第一個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.