jQuery $ .post () и полные URL - PullRequest
1 голос
/ 13 июля 2010

Я работаю над сайтом и у меня 3 разные ветки.Типичная dev-> stage-> производственная ситуация.

Все 3 запускаются на 3 разных URL:

prod: http://www.domain.com

stage: http://www.domain.com/stage

dev: http://www.domain.com/dev

Поэтому я пытаюсь использовать универсальный код, который выполняется на всех 3 без каких-либо изменений путей к файлам.

Чтобы добиться этого, я просто установил base_path var на любой CodeIgniterустановка настроена для этой конкретной ветви.

var base_url = "<?=base_url();?>"; // This sets base_url accordingly.

$.post(base_url + 'login/ajaxLogin', { // See note below
       login_email: $('#login_email').val(),
       login_pass: $('#login_pass').val(),
       },
       function(data) {
          if(data == 'true') {
             window.location.href = base_url;
          } else {
             $('h2').replaceWith('<h2 style="color:#b81900;">Login Failed</h2>');
             return false;
          }
});

Приведенный выше код отлично работает в Chrome.Но это не работает в Safari и Firefox.В Firefox это происходит тихо, и в Safari я получаю "Unable to load resource: cancelled"

NOTE : если я удаляю base_url и просто устанавливаю путь к сценарию /login/ajaxLogin, /dev/login/ajaxLogin или /stage/login/ajaxLogin все работает отлично.

Похоже, что я могу использовать ограничение междоменных сценариев, но я не уверен, почему?

Да, я знаком с Одинаковая политика происхождения и да, я видел это на сайте jQuery:

Из-за ограничений безопасности браузера большинство запросов "Ajax" подчиняются той же политике происхождения;запрос не может успешно извлечь данные из другого домена, субдомена или протокола.

Если запрос с jQuery.post() возвращает код ошибки, он будет молча завершаться, если сценарий также не имеетназывается глобальным .ajaxError() методом.

Ничто из вышеперечисленного не применимо в моем случае, так как я остаюсь в своем домене, поэтому я не совсем уверен, что происходит, но мне бы очень хотелосьнайти обходной путь для этой проблемы.

1 Ответ

1 голос
/ 13 июля 2010

Я не знаком с CodeIgniter, но если эта функция не заключает значение в кавычки, вам нужно будет обернуть его самостоятельно.

var base_path = "<?= base_path(); ?>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...