#ajax #google-api #google-analytics-api
#ajax #google-api #google-analytics-api
Вопрос:
Я пытаюсь отправить запрос для api версии 4, я выполняю этот простой запрос
$.ajax({
url: 'https://analyticsreporting.googleapis.com/v4/reports:batchGet',
headers: {
"Authorization":"Bearer xxxx"
},
method:"POST",
data:{
"reportRequests":[
{
"viewId":"xxx",
"dateRanges":[
{
"startDate":"2015-06-15",
"endDate":"2015-06-30"
}],
"metrics":[
{
"expression":"ga:sessions"
}],
"dimensions": [
{
"name":"ga:browser"
}]
}]
},
success: function(resp){
alert(resp);
}
});
Но это ошибка возврата.
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"description": "Invalid JSON payload received. Unknown name "reportRequests[0][metrics][0][expression]": Cannot bind query parameter. Field 'reportRequests[0][metrics][0][expression]' could not be found in request message."
},
{
"description": "Invalid JSON payload received. Unknown name "reportRequests[0][dateRanges][0][endDate]": Cannot bind query parameter. Field 'reportRequests[0][dateRanges][0][endDate]' could not be found in request message."
},
{
"description": "Invalid JSON payload received. Unknown name "reportRequests[0][dimensions][0][name]": Cannot bind query parameter. Field 'reportRequests[0][dimensions][0][name]' could not be found in request message."
},
{
"description": "Invalid JSON payload received. Unknown name "reportRequests[0][dateRanges][0][startDate]": Cannot bind query parameter. Field 'reportRequests[0][dateRanges][0][startDate]' could not be found in request message."
},
{
"description": "Invalid JSON payload received. Unknown name "reportRequests[0][viewId]": Cannot bind query parameter. Field 'reportRequests[0][viewId]' could not be found in request message."
}
]
}
]
Что я делаю не так?
Комментарии:
1. какой тип контента вы используете?
2. тип содержимого: application / json; кодировка=UTF-8
3. я не использую тип содержимого: application / x-www-form-urlencoded; кодировка = UTF-8
Ответ №1:
Я только что отправил это, в котором указаны те же даты, размеры и показатели, что и в вашем запросе. Работает нормально. Единственное отличие, которое я вижу, заключается в том, что я добавляю токен доступа в конец URI и что я только отправляю 'application/Json'
. 'application/json; charset=UTF-8'
похоже, что тоже работает.
На самом деле я думал, что это было в документации, я свяжусь с разработчиками и попрошу их добавить это куда-нибудь.
URl: 'https://analyticsreporting.googleapis.com/v4/reports:batchGet?access_token=<access_token>'
ContentType = 'application/Json'
{
"reportRequests":[
{
"viewId":"ga:78110423",
"dateRanges":[
{
"startDate":"2015-06-15",
"endDate":"2015-06-15"
}
],
"dimensions":[
{
"name":"ga:browser"
}
],
"metrics":[
{
"expression":"ga:sessions"
}
],
"pageToken":"0",
"pageSize":"1000",
"includeEmptyRows":"true",
"hideTotals":"true",
"hideValueRanges":"true"
}
]
}
Комментарии:
1. можете ли вы написать код, используя ajax pls? я пытаюсь запустить консоль
2. Нет, у меня нет возможностей ajax, извините. Просто измените свой тип контента на «application / Json» и попробуйте. Он должен работать с токеном доступа в заголовке, а также в URL.
3. я в порядке, но теперь у меня есть это «сообщение» об ошибке: «Получена недопустимая полезная нагрузка JSON. Неожиданный токен. nreportRequests[0%5 n ^»,
4. похоже, у вас где-то есть несколько недопустимых символов. Я запустил то, что вы указали, через Json beautifier, и Json действителен и выглядит так же, как у меня. Должно быть, там скрыто что-то еще.
Ответ №2:
Вот перезаписанный запрос, который работает. Требовалось исправить две вещи:
$.ajax({
url: 'https://analyticsreporting.googleapis.com/v4/reports:batchGet',
headers: {
"Authorization": "Bearer XXX"
},
method: "POST",
data: JSON.stringify({
"reportRequests": [{
"viewId": "XXX",
"dateRanges": [{
"startDate": "2015-06-15",
"endDate": "2015-06-30"
}],
"metrics": [{
"expression": "ga:sessions"
}],
"dimensions": [{
"name": "ga:browser"
}]
}]
}),
contentType: 'application/json',
success: function(resp) {
alert(resp);
}
});
- установите для типа содержимого значение ‘application/json’
- используйте JSON.stringify() для преобразования объекта в строку, которая может быть проанализирована сервером API