2016-08-11 7 views
0

У меня есть страница HTML с Google ADWords в ней и вызов ajax с внешнего URL-адреса, и я хочу получить данные json с URL-адреса. Внешнее API также сделано мной. API ControllerLaravel 5.2):Ошибка при получении данных из внешнего API

public function index() 
{ 
    $data = WeatherData::orderBy('created_at', 'DESC')->first(); 

    return Response::json($data); 
} 

HTML ADWORDS Код:

$.ajax({ 
     url: 'https://weather.mnsc.com/api/v1/data', 
     type: 'POST', 
     dataType: 'JSON', 
     cors: true, 
     success: function (data) { 
      console.log(data); 
     } 
    }); 

Но я получаю сообщение об ошибке в Chrome:

XMLHttpRequest не может загрузить https://weather.mnsc.com/api/v1/data. В запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Поэтому исходный 'null' не допускается. В ответе был код состояния HTTP 500.

Есть ли заголовок, который мне нужно установить в API Laravel?

ответ

0

Ну, я нахожу, что может быть проблемой. Проблема связана с типом запроса. Я переключился с post на get в звонок ajax, и теперь он работает как ожидалось.

$.ajax({ 
    url: 'https://weather.mnsc.com/api/v1/data', 
    type: 'GET', 
    dataType: 'JSON', 
    crossDomain: true, 
    success: function (data) { 
    console.log(data); 
    } 
}); 

Но это мне не помогает, поскольку Google AdWords требуется только после запроса ...

Я также подозреваю, что это проблема с API Laravel, там должно быть что-то, что должно быть для использования post запросов.

UPDATE:

как я подозревал, что проблема в post запросов является с Larvael's csrf token.. Я сделал обходной путь, комментируя строку в Kernel.php.

1

Для запроса AJAX вам требуется crossDomain: true, а не обычный. Кроме того, $.ajax() не имеет опции cors, поэтому я удалил это. См jQuery.ajax() settings на странице документации для всех доступных опций:

$.ajax({ 
    url: 'https://weather.mnsc.com/api/v1/data', 
    type: 'POST', 
    dataType: 'JSON', 
    crossDomain: true, 
    success: function (data) { 
     console.log(data); 
    } 
}); 
+0

Не нужно ли ему также устанавливать $ .support.cors = true; ? – spozun

+0

@spozun Я не уверен в этом, позвольте мне проверить. Я обновлю, если так –

+0

Я удалил корс и добавлю вашу строку, все еще не исправил проблему :( – EBuzila

0

Поместите эту строку кода до вашего AJAX вызова. Я должен был всегда устанавливать это для работы jquery ajax в междоменном домене.

$.support.cors = true; 
+0

Это не работает для меня. – EBuzila

+0

http://api.jquery.com/jquery.support/ - На самом деле, я думаю, что jQuery рекомендует против этого. «Предназначен только для внутреннего использования». –