2011-04-16 2 views
0

У меня есть простая форма входа с CodeIgniter и jQuery. У меня есть пара вопросов, связанных с переадресацией и передовым опытом. Вот мой код вызова Ajax:CodeIgniter/Ajax - Redirect

$(document).ready(function(){ 
    $("#btnLogin").click(function(e) { 
     $("p.error").hide(); 
     var email = $("#email").val(); 
     var password = $("#password").val(); 
     $(".loader").show(); 
     $.ajax({ 
      type: "POST", 
      url: "/login/go", 
      data: ({email: email, password: password}), 
      success: function(data){ 
       $(".loader").hide(); 
       if(!data['status']) 
       { 
        $("p.error").html(data['error']); 
        $("p.error").slideDown("fast"); 
       } 
       else 
       { 
        window.location = "site/index"; 
       } 
      } 
     }); 

     e.preventDefault(); 
    }); 
}); 

Как вы можете видеть, я возвращаю истинным или ложным из моего контроллера (в данных [ «статус»]) и двигаться вперед от этого. Тем не менее, я не уверен, что правильный способ сделать это window.location = "". Насколько безопасно, можно ли разместить этот URL-адрес? Пользователи не могут получить доступ к сайту/индексу, не войдя в систему первым. Вход в систему корректно устанавливает проверку CI-сессии и проверки сайта/индекса. Если кто-то не вошел в систему, они перенаправляются на страницу входа. Я просто чувствую себя немного странно, что имея URL в моем AJAX вызова, ха-ха :(

Я попытался решить эту проблему, просто положив redirect("site/index") в мой контроллер после настройки сеанса Некоторый код, так что это имеет смысл:.

if ($this->form_validation->run() == FALSE) 
    { 
     // validation failed, returns false 
    } 
    else 
    { 
        // successful 
        // sets session and then i tried doing: 
        redirect("site/index"); 
    } 

Однако, это не работает. Я не понимаю, почему это не работает, так что если кто-то может объяснить, что я был бы очень благодарен. большое спасибо.

ответ

5

что касается первой части на ваш вопрос:
Вы всегда можете положить data['my_redirect']='site/index' в контроллере и возвратите это с data['status'], поэтому ваша структура сайта не будет «выставлена» для просмотра другими.

Что касается второй части :
Ее не работает, потому что у вас есть запрос Ajax, и вы не можете сделать перенаправление на сервере, прежде чем вернуть данные в JavaScript, которые сделали этот запрос.

+0

- @ Trix, вы можете объяснить вторую часть больше? какие данные необходимо вернуть, чтобы изменить URL? –

+1

, пожалуйста, прочитайте комментарий кабаре на ответ d2burke (если это то, о чем вы говорите) – trix

2

Кабаре - не уверен, что у вас все еще есть эта проблема, но когда я ее искал, я нашел это, а затем нашел подходящее решение, поэтому решил, что разместил ссылку на то, что сделал. я разместил код и объяснение на форумах CI:

http://codeigniter.com/forums/viewthread/65486/

надежду, что помогает

+2

Я прочитаю поток и посмотрю, могу ли я немного обновить свое собственное решение, чтобы улучшить его. Поскольку я работаю с AJAX, я просто возвращаю массив $ feedback от моего контроллера с ключом, называемым 'redirect'. Содержание этого ключа заключается в том, куда следует перенаправлять. В моей функции успеха AJAX я затем делаю 'window.location = data ['redirect']'; это, похоже, работает нормально. Благодарим за это и разместили ссылку! – cabaret

+0

О, хорошо круто. Звучит хорошо – d2burke