2017-02-01 8 views
1

Прежде всего: я искал свою ошибку и нашел полезные подсказки, но они не разрешили мою ошибку. В большинстве заданных вопросов проблема была неправильным ответом json.Ajax Request возвращает JSON, но порождает ошибку

Я делаю запрос Ajax для Google Maps с помощью службы CoffeeScript:

console.log 'widget ready - make request' 
distrequest = $.ajax 'https://maps.googleapis.com/maps/api/distancematrix/json', 
    type: 'GET' 
    data: 
     origins: 'London', 
     destinations: 'Berlin', 
     language: 'de-DE', 
     key: 'ACTUALGOOGLEKEY' 
    #dataType: 'json' #tried to comment this out - same error 
    error: (jqXHR, textStatus, errorThrown) -> 
     console.log "Ajax error " + textStatus + " " + errorThrown 
    success: (data, textStatus, jqXHR) -> 
     console.log "success" 
     console.log data 

Когда я проверяю консольный вывод, я вижу, что widget ready - make request печатается, а затем: Ajax error error

Когда я проверяю свою сеть через FireFox инструменты разработчика я вижу следующее:

Method: GET 
Status: 200 
File: json?origins=... 
Type: json 
Response: { 
"destination_addresses" : [ "London" ], 
"origin_addresses" : [ "Berlin" ], 
"rows" : [ 
    { 
     "elements" : [ 
     { 
      "distance" : { 
       "text" : "24,7 km", 
       "value" : 24732 
      }, 
      "duration" : { 
       "text" : "19 Minuten", 
       "value" : 1146 
      }, 
      "status" : "OK" 
     } 
     ] 
    } 
], 
"status" : "OK" 
} 

Прежде всего - я предполагаю, что JSON от Google ар я хорошо сформирован. Я не вижу никаких ошибок, я не получил ошибку синтаксического анализа, моя консольная консоль firefox распознала тип json и покажет мне (на мой взгляд) действительный объект json. Как-то происходит событие Ajax error, но я не знаю, почему, и errorThrown не помогает вообще.

Извините, если это дубликат - любые идеи? (я действительно изменил Origin and Destination, а также API Google API относительно конфиденциальности. Возвращенные значения - это правильная информация для моего запроса - карты Google не будут думать, что вы можете сделать это за 19 минут от Лондона до Берлина)

Редактировать : dataType: «текст» не работает. jqXHR.responseText пустой в методе ошибки

edit2: Я добавил следующий код в моей функции ошибки:

 console.debug(jqXHR.responseText) 
     console.log "Response Headers "+jqXHR.getAllResponseHeaders() 
     console.log "Status "+jqXHR.status 
     console.log "Status Text "+jqXHR.statusText 

, который дает мне error, его статуса пустой заголовок и responseText, а также код состояния 0

Относительно этого ответа https://stackoverflow.com/a/14507670/5119359 это может быть связанная с CORS вещь? Но мог ли я получить объект JSON, чем в моей сетевой консоли разработчика firefox?

+0

Попытка: «console.debug (jqXHR.responseText);» на событие «ошибка» –

+0

@OfirBaruch это дает мне пустую строку, поэтому, очевидно, нет ответаText –

ответ

0

Отправка запроса от другого источника я получаю ответ: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я думаю, что это зависит от контекста, вы выполняющий Ajax-запрос. Браузеры отключают CORS по умолчанию, чтобы предотвратить отслеживание данных. Я полагаю, что это включено в Firefox Development, поэтому запрос выполнен успешно.

Я не уверен, в каком контексте вы используете приведенный выше код. В случае, если он выполняется в узле с равной настройкой, как и у меня, добавление параметра $.support.cors = true должно быть достаточно.

$.support.cors = true 
distrequest = $.ajax 'https://maps.googleapis.com/maps/api/distancematrix/json', 
    type: 'GET' 
    data: 
     origins: 'London', 
     destinations: 'Berlin', 
     language: 'de-DE', 
     key: 'ACTUALGOOGLEKEY' 
    error: (jqXHR, textStatus, errorThrown) -> 
     console.log "Ajax error " + textStatus + " " + errorThrown 
    success: (data, textStatus, jqXHR) -> 
     console.log "success" 
     console.log data