Такая вот задача, есть два кроссдоменных post-запроса к одному и тому же серверу, но разных по требуемым данным (пока их два потом будет больше).
Если делать один запрос все хорошо, но если сразу запустить синхронно оба запроса, то они начинают конкурировать друг другом и срабатывает защита браузера, потому что был отправлен OPTION запрос с одним url и тут же за ним идет POST-запрос с другим url и он плюется что так нельзя.
Конечно в данном конкретном случае (первая загрузка приложения) можно эти запросы выставить по порядку и следующий выполнять только если предыдущий успешно завершил свою работу.
Но я тут сразу подумал, а когда логика усложнится и появятся какие-нибудь таймеры которые по времени будут делать запросы, а еще в это время юзер может совершать какие-то действия и тогда снова возникнет случай когда два запроса пойдут одновременно.
А есть какая-то библиотека или еще как-нибудь может можно ВСЕ кросс-доменные запросы ставить в очередь на исполнение, чтобы они всегда выполнялись по порядку постановки в очередь, тогда эта проблема никогда не возникнет и можно будет смело делать запросы по различным таймерам.
Или может я неправильно логику приложения строю, при первой инициализации приложения ведь в основном можно обойтись запросами GET и тогда можно не юзать CORS, а использовать JSONP, а post-запросы через CORS следить чтобы срабатывали только от действий пользователя, ведь он не сможет сразу нажать на несколько кнопок (при нажатии на первую появится overlay который закроет собой весь функционал пока не выполнится запрос)
Хотя если есть какая-то возможность выстраивать все запросы в очередь это было бы удобнее
UPDATE 1
вот сваял пример
$klein->respond(['GET', 'OPTIONS'], '/test1', function ($request, $response) {
$response->header('Access-Control-Allow-Origin', '*');
if ($request->method('get')) {
$response->json(['result1' => 'success1']);
} else {
$response->send();
}
});
$.ajax({
url: pathRoot + 'test1',
type: 'GET',
success: function(result, textStatus, jqXHR) {
console.log(result);
},
});
если выполнил js-код один раз, то получим ответ
Object {result1: "success1"}
а вот если этот же код поставит на выполнение два раза, т.е. послать синхронные запросы
$.ajax({
url: pathRoot + 'test1',
type: 'GET',
success: function(result, textStatus, jqXHR) {
console.log(result);
},
});
$.ajax({
url: pathRoot + 'test1',
type: 'GET',
success: function(result, textStatus, jqXHR) {
console.log(result);
},
});
тогда результат будет уже таким
1. Object {result1: "success1"} - первый запрос успешно выполнился
2. а вот второй уже пришел с ошибкой
GET
app.localhost/test1?_=1472203984338
XMLHttpRequest cannot load
app.localhost/test1?_=1472203984338. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '
test.localhost' is therefore not allowed access. The response had HTTP status code 500.
НО иногда все срабатывает
Object {result1: "success1"}
Object {result1: "success1"}