2013-05-29 2 views
-1

Ниже мой HTML код из шаблона Smarty:Что случилось с моим кодом jquery-ajax, чтобы он не работал должным образом?

<div id="user-popup-login" title="Demo Test Packages"> 
    <div id="pop-up"> 
    <!--<div class="popup-right"><img src="images_new/close.gif" alt=" " align="right" width="29" height="29" /></div> 
    <div class="clear"></div>--> 
    <div class="error_msg" id="login_error" style="text-align:center; margin-top:5px;"> 

    </div> 
    <div class="clear"></div> 
    <div class="popup-left"> 
     <form name="user_login_form" id="user_login_form" class="login_box" method="post" action="{$site_url}login"> 
     <input type="hidden" name="referral_url" value="{$referral_url}" id="referral_url" /> 
     <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
      <td colspan="2"><input name="user_name" id="user_name" class="user" type="text" value="E-mail" onblur="if(this.value=='') this.value='E-mail';" onfocus="if(this.value=='E-mail') this.value='';" /> 
      </td> 
      </tr> 
      <tr></tr> 
      <tr> 
      <td colspan="2"><input name="user_password" id="user_password" class="user" type="password" value="password" onblur="if(this.value=='') this.value='password';" onfocus="if(this.value=='password') this.value='';" /> 
      </td> 
      </tr> 
      <tr></tr> 
      <tr> 
      <td><input name="Submit" type="submit" class="login-btn" value="" /></td> 
      <td><div id="registern"><a href="#" class="register-btn">Register Now</a></div></td> 
      </tr> 
      <tr> 
      <td align="right" colspan="2"><a href="{$site_url}forgot_password.php?op=forget_password" class="forget">Forgot Password? </a> &nbsp; </td> 
      </tr> 
     </table> 
     </form> 
    </div> 
    <!--<div class="popup-right"><img src="images_new/facebook-sign.gif" alt=" " width="156" height="229" /></div>--> 
    <div class="clear"></div> 
    </div> 
</div> 

Ниже мой JQuery код:

<script language="javascript" type="text/javascript"> 
$(function() { 
    $("#user-popup-login").dialog({ autoOpen: false }); 
    $(".user-not-loggedin") 
    .click(function() { 
    $("#user-popup-login").dialog("option", "width", 400); 
    $("#user-popup-login").dialog("option", "modal", true); 
    $("#user-popup-login").dialog("open"); 

    return false; 
    }); 

    $(".get-start") 
    .click(function() { 
    $("#user-popup-login").dialog("option", "width", 400); 
    $("#user-popup-login").dialog("option", "modal", true); 
    $("#user-popup-login").dialog("open"); 

    return false; 
    });  

    //This function is used to submit User Login form 
    $('#user_login_form').live('submit', function() { 
    $('.login-btn').attr('disabled', 'disabled'); 
    show_request('#login_error'); 
     $.ajax({ 
     type: $(this).attr('method'), 
     url: $(this).attr('action'), 
     data:$(this).serialize(), 
     dataType: 'json', 
     success: function(response) { 
      $('.login-btn').removeAttr('disabled', 'disabled'); 
      var log_error = response.log_error; 

      if(log_error=='yes') { 
      var error_msg  = response.error_msg; 
      var dialog_title = 'Input Errors Found';     
      var dialog_message = error_msg; 
      $("#login_error").html(error_msg); 
      } else { 
      $("#login_error").html(''); 
      $("#user-login").dialog('close'); 
      var suc_msg = response.suc_msg; 
      var dialog_title = 'Logged in Successfully';     
      var dialog_message = suc_msg; 

      var $dialog = $("<div class='ui-state-success'></div>") 
      .html("<p class='ui-state-error-success'>"+dialog_message+"</p>") 
      .dialog({ 
       autoOpen: false, 
       modal:true, 
       title: dialog_title, 
       width: 500,    
       buttons:{ 
       'OK': function() { 
       $(this).dialog('close'); 
       } 
       }        
      }); 
      $dialog.dialog('open'); 
      $('#user_login_form')[0].reset(); 
      } 

     } 
     });  
     return false; 
    }); 
}); 
</script> 

И мой PHP файл с именем user_login.php, который имеет имя, увы логин, который используется в action имеет следующий код:

<?php 
    include_once("includes/application-header.php"); 

    prepare_request(); 

    $obj_login = new Login(); 

    if($gSession->ReadFromSession('IS_LOGGEDIN') && $_GET['act'] !='logout') { 
    header("location:".SITE_URL."home"); 
     die(); 
    } else {  
     if("POST" == $_SERVER['REQUEST_METHOD']) { 
      $login_data = extract_array($_POST , array("user_name", "user_password")); 
      $user_id = $obj_login->DoUserLogin($login_data); 

      if($user_id) { 
       list($subscription_type, $days_left) = $gUsers->GetUserSubscriptionDetailsByUserID($user_id); 

       if($gUsers->InitiateUserSession($user_id, $subscription_type, $days_left)) { 
        $gUsers->UpdateUserLoginHistory($user_id); 
        $reponse_data['login_error'] = 'no'; 
        $reponse_data = json_encode($reponse_data); 
        echo $reponse_data; 
        die(); 
       } 
      } else { 
       $error_msg = $obj_login->GetError(); 
       list($login_data) = prepare_response($login_data); 
       $error_msg = '<b>We are unable to log you in for one of the following reasons:</b> 
              </p> 
              <ul> 
              <li>Incorrect email or password (case sensitive)</li> 
              <li>Cookies are not enabled on your browser</li> 
              <li>You havent registered with entrance prime</li> 
              <li>We have not activated your account</li> 
              </ul><p></p>'; 
       $reponse_data['login_error'] = 'yes'; 
       $reponse_data['error_msg'] = $error_msg; 
       $reponse_data = json_encode($reponse_data); 
       echo $reponse_data;  
       die(); 
      } 
     } 

     // CODE FOR LOGOUT 
     if(isset($_GET['act']) && $_GET['act']=='logout') { 
      $gUsers->UpdateUserLogoutHistory(); 
      $obj_login->UserLogout(); 

      header("Location:".SITE_URL."home"); 
      die(); 
     } 
    } 
?> 

Моя проблема в том, что когда я нажимаю кнопку «Логин» без заполнения каких-либо значений, форма представляется без ny и отображает «undefined» во всплывающем окне вместо того, чтобы показывать мне ошибки. Может ли кто-нибудь помочь мне решить эту проблему?

+0

Какую версию JQuery вы используете? 'live' был удален в v1.9. Вы получаете какие-либо ошибки в консоли JavaScript вашего браузера? –

+0

@ T.J.Crowder: Да, я это знаю. Я использую jQuery 1.4.1, который поддерживает live. Поэтому я не ошибаюсь. – PHPLover

+0

@ T.J.Crowder: К сожалению, это невозможно. Я должен работать с 1.4.1 только сейчас. – PHPLover

ответ

2

в PHP -> login_error

$reponse_data['login_error'] = 'no'; 

in ajas callback ---> log_error

 var log_error = response.log_error; 

пытаются изменить все log_error к login_error

+0

Большое вам спасибо за указание на мою ошибку. По вашему предложению я сделал смену, и это сработало для меня. Ты спас свое драгоценное время. Я отметил это как правильный ответ, а также увеличил ваши баллы. Еще раз Большое вам спасибо за вашу помощь. – PHPLover

+0

Хороший! ..... –

-1

Я считаю, что $ (this) внутри $ .ajax не указывает на объект $, который вы хотите (форма).

Try письма чуть ниже этой линии:

$('#user_login_form').live('submit', function() { 
    myform = $(this); // caching the jquery object to a local variable 

, а затем пишу это в соответствующем разделе ниже (замените код):

$.ajax({ 
     type: myform.attr('method'), 
     url: myform.attr('action'), 
     data:myform.serialize(), 
+0

Нет, это неправильно. 'this' будет ссылаться на форму. Он не был бы включен в один из «обратных вызовов» ajax' *, но в момент создания объекта опций это все равно функция обработчика событий, и поэтому 'this' по-прежнему является формой. '$ .ajax ({/*...*/})' first * создает * объект options ('{/*...*/}') и * then * вызывает функцию. Это точно так же, как 'var o = {/*...*/}; $ .ajax (o); ' –

+0

Я пробовал ваш трюк, но все же ошибки не отображаются, и появляется всплывающее сообщение с текстом« undefined ». – PHPLover

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