2012-06-20 4 views
0

У меня есть эта форма, которая обновляет информацию о пользователе на db. Однако эта функция не работает с ajax (работает с простой отправкой с обновлением).ajax form не обновляет значения

Эта Postes образуют последовательную форму данных на сервер JQuery

$('#commit-changes').click(function(){    

      $('#validation').submit(function(){ 
       $.ajax({ 
       type: "POST", 
       data: $("#validation").serialize(), 
       cache: false, 
       url:"modules/user/updateuser.php", 
       success : function(data){ 
        $("#response-update").html(data); 
       }, 
       error:function(){ 
        alert("ERROR"); 
       } 

      }); 
      });    
     }); 

Вот HTML, который выводит разметку HTML

$rcs_roles = $user->getRoles(); 
    $role =''; 
    foreach($rcs_roles as $roles) 
    { 
     if($roles->role_number == $rcs_user->permissao) 
      $role .= '<option value="'.$roles->role_number.'" selected="selected">'.$roles->role.'</option>'; 
     else 
      $role.= '<option value="'.$roles->role_number.'">'.$roles->role.'</option>'; 
    } 

    if($rcs_user->activo == 0) 
    { 
     $activo = '<input type="checkbox" name="activo" class="on_off_checkbox" value="1" />'; 
    } 
    else 
    { 
     $activo = '<input type="checkbox" name="activo" class="on_off_checkbox" checked="checked" value="1" />'; 
    } 


    $response = ''; 

    $response.='<form id="validation" action="" method="post"> 
            <fieldset > 
            <input type="hidden" name="user_id" 

value="'.$_POST['user_id'].'"/> 
           <legend>Actualizar Dados Utilizador</legend> 
             <div class="section "> 
             <label>Nome<small>Insira o seu nome</small></label> 
             <div> 
             <input type="text" class="validate[required,custom[onlyLetterSp]] large" name="nome" id="f_required" value="'.utf8_encode($rcs_user->nome).'"> 
             </div>          
             </div>'; 
$response.='<div class="section "> 
             <label> Email<small>Insira o seu email</small></label> 
             <div> 
             <input type="text" class="validate[required,custom[email]] large" name="email" id="e_required" value="'. utf8_encode($rcs_user->email).'"> 
             </div> 
             </div>'; 

$response.= '<div class="section"> 
             <label>Permissões<small>Seleccione o tipo de utilizador </small></label> 
             <div> 
              <select class="medium" name="role"> 

                 '.$role.'   



             </select>  
            </div> 
            </div>          
           <div class="section"> 
             <label>Activo<small>Activar utilizador</small></label> 
             <div> 
              '.$activo.' 
              <span class="f_help">ON/OFF </span> 
             </div> 
            </div> 

            <div class="section last"> 
            <div> 
             <a id="commit-changes" class="uibutton submit_form" name="submit" >Gravar</a><a class="uibutton special" onClick="ResetForm()" title="Limpar Formulário" >Limpar Formulário</a> 
           </div> 
           </div> 

           </fieldset></form>'; 

И тогда обработка на стороне сервера PHP

$response=''; 
$id_user = $_POST['user_id']; 
$name = utf8_encode($_POST['nome']); 
$email = utf8_encode($_POST['email']); 

$permitions = $_POST['role']; 

if(!isset($_POST['activo'])) 
{ 
    $active = 0; 
} 
else 
{ 
    $active = 1; 
} 

$user = new Users(); 

try 
{ 
    $user->updateUsers($name, $email, $permitions, $active, $id_user); 
    $response = "SUCESSO"; 
} 
catch (Exception $e) 
{ 
    $response = "ERRO".$e->getMessage(); 
} 

echo $response; 

Рад за всю помощь я могу получить

+1

Вы проверили firebug? 404 происходит для вызова сервера? – Hardik

+0

Wierd, но firebug, похоже, даже не реконструирует метод –

+0

@hardik, если я заменю '$ ('# commit-changes'). Click (function()' с 'function doUpdate()', а затем назовите его нажатием , это работает! Тем не менее, обратный вызов ошибки называется ... –

ответ

0

Из первоначального взгляда, похоже, что вы не ждать, пока документ не будет загружен до привязки обработчика событий. Это означает, что # commit-changes даже не существует, когда вы пытаетесь добавить обработчик события .click.

Чтобы исправить это в JQuery, обернуть вокруг этого весь код:

$(document).ready(function(){ 
    // do stuff 
}); 

Эта функция посылает обратный вызов document.ready обработчика JQuery, так что весь код выполняется только после загрузки страницы.

+0

Да, он существует, хотя я обошел код, который выталкивает данные HTML с сервера. –

0

Удалите функцию .submit(). что-то вроде этого.

$.post("modules/user/updateuser.php",{data:$("#validation").serialize()},function(response){ 
    $("#response-update").html(response); 
}); 

на стороне пользователя php попытайтесь выполнить print_r($_POST['data']); и, пожалуйста, опубликуйте результат.

+0

Тем не менее ничего не произошло ... новые записи не сохраняются –

+0

Я не получаю ответ от print_r либо –

0

В updateUsers функция (в классе пользователей) вы пытаетесь обновить поле Нома или имя?

Вы можете использовать только nome?

+0

Нет. Я обновляю все поля, которые поступают из формы сразу. –

+0

Есть ли шанс, что вы можете поместить код в jsfiddle? Или дать URL-адрес разработки, чтобы мы могли проверить, что на самом деле происходит на вашей странице. – Hardik

Смежные вопросы