/ / jQuery .ajax () виклик хосту, що дорівнює відмові поточної сторінки - jquery, ajax

jQuery .ajax () дзвінок на хост рівний поточній сторінці невдало - jquery, ajax

Я будую інтерфейс до внутрішньої системи за допомогою 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" залишається загадкою.