Я будую інтерфейс до внутрішньої системи за допомогою JavaScript (з Jquery).
Система "розміщує" як сам інтерфейс як веб-сторінку, так і API, з яким вона спілкується через виклик $ .ajax.
Коли я відкриваю інтерфейс на http://localhost:4242
, встановіть хост api (значення URL-адреси для виклику $ .ajax) на http://localhost:4242/api
і спробуйте $ .ajax виклик, він закінчиться.
Здається, тому, що обидві адреси рівні, тому що якщо я зміню будь-яку з них на локальну ip-адресу або ім’я хосту або відкрию інтерфейс із файлу html, запит працює належним чином.
Це обмеження функції $ .ajax чи щось інше?
Редагувати: більше інформації!
- серверний сервер ніколи не отримує запит
- запит ajax справді з'являється в мережевій консолі (очікує на розгляд та скасовується після закінчення часу очікування)
- в
$.ajax({error: function(jqXHR,textStatus,errorThrown){ //stuff }})
спрацьовує після досягнення значення тайм-ауту за допомогою textStatus і errorThrown both == "timeout"
Гаразд .. якщо я зміню тип із POST на GET, раптом це спрацює як шарм. Wut?
Я думав, що, можливо, доведеться це зробити з типом даних "jsonp", оскільки він призначений для міждоменного зв'язку, але зміна на "json", якщо домен рівний, не впливає.
Відповіді:
0 для відповіді № 1Не існує такого обмеження $ .ajax, інакше життя було б просто непрактичним у цьому світі :)
Якщо ви впевнені, що запит надсилається (перевіртена вкладці "Мережа" в Chrome або Firebug!) і дійсно час очікування, то, звичайно, це, швидше за все, проблема з вашим інтерфейсом, але це звучить дивно. Що ви маєте на увазі під словом "коли я відкриваю інтерфейс із файлу html" ?
0 для відповіді № 2
Зараз ми вирішили проблему. Виявляється, якщо використовувати dataType: "jsonp"
не будучи запитом між доменами, параметр crossDomain повинен бути встановлений як true. Це майже логічно.
Чому це добре працювало type: "GET"
залишається загадкою.