2015-12-18 2 views
2

Я пытаюсь проверить базовую форму входа с полями имени пользователя и пароля. Мне нужно подтвердить имя пользователя и пароль с check.php ajax. Нет никаких проблем в запросе и ответе ajax. Я получаю правильный ответ на странице ajax. Но функция успеха Ajax работает неправильно.Функция успеха Ajax не работает в jQuery mobile

ajaxrequest.html

$(document).on('pagebeforeshow', '#login', function(){ 
     $(document).on('click', '#submit', function() { 
     if($('#username').val().length > 0 && $('#password').val().length > 0){ 
       $.ajax({ 
        url : 'serverurl/check.php', 
        data: {action : 'login', formData : $('#check-user').serialize()}, 
        type: 'post',     
        beforeSend: function() { 
         $.mobile.loading(true); 
         alert("beforesend"); 
        }, 
        complete: function() { 
         $.mobile.loading(false); 
         alert("complete"); 
        }, 
        success: function (result) { 
         console.log("Ajax response"); 
         res = JSON.stringify(result); 
         if(res.status == "success"){  
         resultObject.formSubmitionResult = res.uname; 
         localStorage["login_details"] = window.JSON.stringify(result); 
         $.mobile.changePage("#second"); 
       }else{ 
         $.mobile.changePage("#login"); 
         alert("incorrect login");   
       } 
        }, 
        error: function (request,error) { 
         alert('Network error has occurred please try again!'); 
        } 
       });     
     } else { 
      alert('Fill all fields'); 
     }   
      return false; 
     });  
}); 

Здесь я добавил мою страницу AJAX. Эта страница проверяет только имя пользователя и пароль. Наконец, он возвращает объект json. Что я делаю не так?

ServerURL/check.php

header("Access-Control-Allow-Origin: *"); 
header('Content-Type: application/json'); 
if(isset($_POST['formData']) && isset($_POST['action']) && $_POST['action'] == 'login'){ 
    parse_str($_POST['formData'],$searchArray); 
    $uname = "arun"; 
    $pwd = "welcome"; 
    $resultArray = array(); 
    if($uname == $searchArray['username'] && $pwd == $searchArray['password'])  
    { 
     $resultArray['uname'] = $searchArray['username']; 
     $resultArray['pwd'] = $searchArray['password']; 
     $resultArray['status'] = 'success'; 
    }else{ 
     $resultArray['status'] = 'failed'; 
    } 
    echo json_encode($resultArray); 
} 
+0

Опубликовать ответ json, любые ошибки или исключения. – Mohit

+0

Не получаю никаких ошибок. Вместо этого, я не получаю ответ в функции успеха. Непосредственно он переходит в функцию ошибки. – Arun

ответ

1

Ваш код должен быть

success: function (result) { 
         console.log("Ajax response"); 
         //don't do this 
         //res = JSON.stringify(result); 
         if(result.status == "success"){  
         resultObject.formSubmitionResult = result.uname; 
         localStorage["login_details"] = window.JSON.stringify(result); 
         $.mobile.changePage("#second"); 
       }else{ 
         $.mobile.changePage("#login"); 
         alert("incorrect login");   
       } 

После JSON.stringify вы обращаетесь, как stringJson.status это не будет работать. его мачта «разобралась» «json object« не напрягаться.

+0

Спасибо за ваш ответ. Я хочу сделать, jQuery.parseJSON (результат) или просто удалить это stringify? – Arun

+0

просто удалите строку. –

+0

Я сделал так, как сказал. После преобразования в apk я установил свой apk на свой мобильный. такой же проблема есть. когда я ввожу неправильное имя пользователя и пароль, он переходит в функцию ошибки и выдает сообщение об ошибке (произошла сетевая ошибка, повторите попытку!). Ответ не попадает внутрь функции успеха – Arun

1

Не нужно преобразовывать JSON в String.

$(document).on('pagebeforeshow', '#login', function(){ 
     $(document).on('click', '#submit', function() { 
     if($('#username').val().length > 0 && $('#password').val().length > 0){ 
       $.ajax({ 
        url : 'serverurl/check.php', 
        data: {action : 'login', formData : $('#check-user').serialize()}, 
        type: 'post',     
        beforeSend: function() { 
         $.mobile.loading(true); 
         alert("beforesend"); 
        }, 
        complete: function() { 
         $.mobile.loading(false); 
         alert("complete"); 
        }, 
        success: function (result) { 
         console.log("Ajax response"); 
         //Don't need to converting JSON to String 
         //res = JSON.stringify(result); 
         //directly use result 
         if(result.status == "success"){  
         resultObject.formSubmitionResult = result.uname; 
         localStorage["login_details"] = window.JSON.stringify(result); 
         $.mobile.changePage("#second"); 
       }else{ 
         $.mobile.changePage("#login"); 
         alert("incorrect login");   
       } 
        }, 
        error: function (request,error) { 
         alert('Network error has occurred please try again!'); 
        } 
       });     
     } else { 
      alert('Fill all fields'); 
     }   
      return false; 
     });  
}); 
+0

В браузере получается правильный результат. Когда я конвертирую свой код в apk и устанавливаю на мобильное устройство. это не работает. – Arun

+0

Этот результат не работает в andriod, если вам нужно использовать оба, то вам нужно использовать API, чтобы обеспечить результат для обоих. –

+0

Мне нужно четко прояснить ситуацию. Вам нужно использовать API. Что это значит. можете ли вы рассказать мне более подробно? – Arun

1

Ваш вызов AJAX является совершенным, но тип данных не объявляется в AJAX

Попробуйте с JSon ИЛИ JSONP. Вы получите успех.

$.ajax({ 
    url : 'serverurl/check.php',      
    type: 'post', 
    dataType: "json", OR "jsonp", 
    async: false, 
    data: {action : 'login', formData : $('#check-user').serialize()}, 
     beforeSend: function() { 
     $.mobile.loading(true); 
     alert("beforesend"); 
    }, 
    complete: function() { 
     $.mobile.loading(false); 
     alert("complete"); 
    }, 
    success: function (result) { 
     console.log("Ajax response"); 
     alert(JSON.stringify(result)); // Check response in alert then parse according to that 
     res = JSON.stringify(result); 
     if(res.status == "success"){  
     resultObject.formSubmitionResult = res.uname; 
     localStorage["login_details"] = window.JSON.stringify(result); 
     $.mobile.changePage("#second"); 
}else{ 
     $.mobile.changePage("#login"); 
     alert("incorrect login");   
} 
    }, 
    error: function (request,error) { 
     alert('Network error has occurred please try again!'); 
    } 
}); 
+0

В браузере я получаю правильный результат. Когда я конвертирую свой код в apk и устанавливаю на мобильное устройство. это не работает. – Arun

+0

Используйте async: false & jsonp для мобильных целей – Ajinkya

+0

Я также попытался async & jsonp. Та же проблема есть. функция успеха не работает – Arun

1

В некоторых случаях ваш сервер может не вернуть ответ правильно. Вы пытались обработать фактический код ответа (например, если ваш сервер возвращает 200) следующим образом:

$.ajax({ 
     url : 'serverurl/check.php', 
     data: {action : 'login', formData : $('#check-user').serialize()}, 
     type: 'post', 
     .... 
     statusCode: { 
       200: function (response) { 
         // do your stuff here 
        } 
     } 
}); 
+0

Я пробовал statusCode, внутри statusCode я использовал alert (statusCode), он возвращает empty [object Object]. Наверное, мы рядом. Что это? – Arun

+0

try: 'alert (response);' или 'alert (response.responseText);' в зависимости от того, как выглядит ваш ответ ... –

+0

alert (response) дает [object Object], alert (response.responseText) дает undefined. – Arun

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