制定这个问题的标题真的很难。我将从代码片段开始:
[..]
<a href="#" id="register-link">register</a>
[..]
<script>
$(document).ready(function(){
$('#register-link').on('click',function(){
$.get(baseurl + 'index.php/auth/register', function(response){
$('#popup-div').html(response);
});
});
});
</script>
控制器方法auth / register结束于:
$this->load->view('auth/register_form', $data);
基本思想是当用户点击&#34;注册&#34;在菜单中弹出窗口而不是加载新页面。注册工作。
但是,auth / register方法有两种结束方式:
function register()
{
// a bunch of $this->form_validation->set_rules();
// and other server side logic
if ($this->form_validation->run()) {
// server side logic
redirect('auth');
} else{
//getting same $data
$this->load->view('auth/register_form', $data)
}
}
所以问题是如果我得到验证错误(表单验证没有运行并且我得到html响应),新页面会加载表单显示错误,而不是在弹出窗口中执行此操作。如果注册成功,我会重新加载新页面,以便向用户显示注册成功,这很烦人。所以我想检查控制器是否重定向并将该重定向url传递到同一个div。
我查了同样类似的问题,但无法让它发挥作用。到目前为止,我有这个:
$(document).ready(function(){
$('#register-link').on('click',function(){
$.get(baseurl + 'index.php/auth/register', function(response){
if (response.redirect) {
//alert(response.redirect);
$.get(response.redirect, function(response2){
$('#popup-div').html(response2);
});
}
else {
$('#popup-div').html(response);
}
});
});
});
但没有任何变化,我也没有任何错误。如果我正确地理解了这个问题,那么只需要调用一次,这样我就可以得到视图了。我试图移除$(document).ready(function(){ ... });
部分,但仍然没有。如果我尝试将ajax呼叫附加到每个&#34;提交&#34;我(想)会弄乱验证。
更新 从下面的评论我得到了坦克auth控制器内部工作可能更容易。首先,我将展示Tank auth如何重定向的完整序列。在auth / register内部实际上是
$this->_show_message($this->lang->line('auth_message_registration_completed_1'));
其中:
function _show_message($message)
{
$this->session->set_flashdata('message', $message);
redirect('/auth/');
}
和
function index()
{
if ($message = $this->session->flashdata('message')) {
$this->load->view('auth/general_message', array('message' => $message));
} else {
redirect('/auth/login/');
}
}
它背后的想法是在不同的情况下调用_show_message,并显示不同的消息。我想在我的popup div中处理所有这些情况。我试图改变:
$this->_show_message_JSON($this->lang->line('auth_message_registration_completed_1'));
其中:
function _show_message_JSON($message)
{
$this->session->set_flashdata('message', $message);
$data['redirect'] = '1';
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-Type: application/json');
echo json_encode($data);
}
并在JS中处理逻辑:
$(document).ready(function(){
$('#register-link').on('click',function(){
$.get(baseurl + 'index.php/auth/register', function(response){
if(typeof response == 'object'){
//alert(response);
$.get(baseurl + 'index.php/auth', function(response2){
$('#popup-div').html(response2);
});
}
else {
$('#popup-div').html(response);
}
});
});
});
然而,如果验证成功,我得到的是:
{"redirect":"1"}
<form action="http://localhost/test4/index.php/auth/register" method="post" accept-charset="utf-8">
<table>
<tr>
<td><label for="username">Username</label></td>
<td><input type="text" name="username" value="user21" id="username" maxlength="20" size="30" />
</td>
<td style="color: red;"></td>
</tr>
[...]
基本上是源代码,除了附加第一行。