Возврат [Object object] из json_encode

#javascript #php #jquery #json #ajax

#javascript #php #jquery #json #ajax

Вопрос:

У меня возникли проблемы с возвратом сообщения о состоянии из php-файла в ajax-функцию в html-файле. При переходе к отправке я получаю [Object object] на экране. Насколько я понимаю, json_encode сможет вернуть объект $answer с его значением. Я что-то здесь упускаю?

php

 <?php  
 require_once 'dbconfig.php';
 require_once('FirePHPCore/fb.php');
 ob_start();

  $answer = new stdClass;
 if(isset($_POST))
 {
     $uname;
     $pword;
     //email = ema
     $ema;

     $answer->result = "successful";
     $answer->text = "";
     foreach($_POST as $key => $value)
     {
        if($key == 'u')
        {
            $uname = $value;
        }
        else if($key == 'p')
        {
            $pword = $value;
        } 
        else if($key == 'em')
        {
            $ema = $value;
        }
     }
    }
    else
    {
        $answer->result = "Error";
        $answer->text = "Error Message";
    }

    $check = mysqli_query($con, "SELECT username FROM users WHERE username = '$uname'")  or die(mysql_error());  
    $check2 = mysqli_num_rows($check);

    if ($check2 != 0) {  
    $answer->text = "sorry username taken";
    $ansr = json_encode($answer);
    echo $ansr;
    die('Sorry, the username is already in use.'); 
     }
   exit(0);
?>
  

ajax в моем html-файле

  $.ajax({
            type: "POST",
            url: "registration.php",
            dataType: "json",
            data : { u: un, p:p1, e:em },
            cache: !1,
            beforeSend: function(){
                $("#submit").hide();
                $('#status').text('please wait ...');
            },
            complete: function(){
                $("#submit").show();
            },
            success: function(answer){
                if(answer.result == "successful")
                {
                    $("#status").html(answer.text);
                }
                else
                {
                    $("#status").html(answer.result);
                }
            },
            error: function(answer){
                $("#status").text(answer);
            }
        });
  

любые советы или подсказки будут оценены.

Комментарии:

1. Я думаю, что ваш JSON на самом деле в порядке, но вызов ajax заканчивается error в ветке, которая просто распечатывает весь answer объект. Если вы используете $("#status").html(answer.text); вместо $("#status").text(answer); , вы должны увидеть правильное сообщение об ошибке.

2. проверьте объект в консоли. Вам нужно выполнить некоторую базовую отладку, используя инструменты разработки, встроенные в ваш браузер

3. echo $ansr, за которым следует die (str), приведет к повреждению вашего вывода json

4. если вы используете die(msg) после отправки данных json, это приведет к аннулированию данных json

5. @RamRaider вы правы

Ответ №1:

Спасибо @RamRaider! Использование die() сразу после использования json_encode сделало данные недействительными.