Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   success json undefined (https://javascript.ru/forum/jquery/63801-success-json-undefined.html)

Vincent Vega 30.06.2016 14:23

success json undefined
 
Подскажите пожалуйста..
function loginValidate( inp, login )
{
    var msg = inp+'='+login;
    msgServer( msg ) ? showAnswer( 'Iseet User!' ) : showAnswer( 'ok!' );   
}
showAnswer() - просто показывает ответ.
msgServer() - отправляет запрос на сервер и получает ответ в виде true/false.
Подскажите, почему в loginValidate возвращается undefined?
success: function ( data ) alert( data );
- выдает true;


Пробовал:
var resp =  msgServer( msg );
alert( resp );
- undefined.

Царь Леонид 30.06.2016 15:40

Если отвечать, исходя из кода, который вы показали, то однозначно можно утверждать только одно : что-то возвращает undefined. Выкладывайте все запросы, серверные скрипты и тд

Vincent Vega 30.06.2016 15:56

ok.
function phoneVal( name, values )
{
    values.length < 10 || values.length > 12 || isNaN( values ) ? //чахлая проверка
        chenger( name, 'Некорректный телефон!' ) : //показывает ответ
        var msg = msgServer( name+'='+values ) ;   //запрос к серверу и почему-то в msg попадает undefined...
    msg ? chenger( name, 'Уже существует!' ) : chenger( name, 'ok' ) ;
}

отправка на сервер:
function msgServer( msg )
{
    //alert( msg );
    $.ajax  ({
        type:       'post',
        data:       msg,
        url:        '/ajax/',
        dataType:   'json',
        success:    function( data )     {  return data; // тут true/false, проверено alert, работает! },
        error:		function( xhr, str ) {  alert('Возникла ошибка: ' + xhr.responseCode); }
    });
}

php нужен?

dd_smol 30.06.2016 16:22

Если не назначить фукции что она должна возвращать после как отработает она вернет undefined ... если хотите что то отдавать после ее работы отдавайте через return

Vincent Vega 30.06.2016 16:28

success: function( data ){  return data; // тут true/false, проверено alert, работает! },
в самом ответе data содержится true или false. Я как бы return data. Или что то не так делаю?

dd_smol 30.06.2016 16:31

Цитата:

Сообщение от Vincent Vega (Сообщение 420905)
success: function( data ){  return data; // тут true/false, проверено alert, работает! },
в самом ответе data содержится true или false. Я как бы return data. Или что то не так делаю?

Если вы слушаете ответ от loginValidate то и return должен быть в ней прописан.

Из кода выше все ваши фукции не имеют return а значит нечего не возвращают верней возвращают ответ по умолчанию то есть undefined

Vincent Vega 30.06.2016 16:47

Цитата:

Сообщение от dd_smol (Сообщение 420907)
Если вы слушаете ответ от loginValidate то и return должен быть в ней прописан.

Из кода выше все ваши фукции не имеют return а значит нечего не возвращают верней возвращают ответ по умолчанию то есть undefined

Как раз я слушаю ответ от msgServer() который жду в loginValidate() в переменную msg.

dd_smol 30.06.2016 16:55

Зеркальная ситуации msgServer не чего не возвращает. То что вы написали return в success нечего не меняет.

function msgServer( msg )
{
    //alert( msg );
    var flag;

    $.ajax  ({
        type:       'post',
        data:       msg,
        url:        '/ajax/',
        dataType:   'json',
        success:    function( data )     { flag = data; // тут true/false, проверено alert, работает! },
        error:		function( xhr, str ) {  alert('Возникла ошибка: ' + xhr.responseCode); }
    });

    return flag;
}

Vincent Vega 30.06.2016 17:32

dd_smol,
Спасибо за наводку! :) Пытаюсь + в карму, пишет "вы должны добавить отзыв кому-то еще, прежде чем сможете добавить его dd_smol". Все верно, только есть еще заморочка. нужно выставить async: false. Из за асинхронности он возвращает ответ раньше чем получает его от сервера.

Vincent Vega 30.06.2016 17:40

выставил async: false отладчик ругается, мол не молодец, так ниразу делать не стоит. Есть еще какие нибудь варианты?

наковырял в гугле какую-то функцию типа callback, только не знаю как ее правильно прикрутить.


Часовой пояс GMT +3, время: 17:06.