Функция JavaScript не работает в соответствии с ответом JSON

#javascript #php #json

Вопрос:

Я кодирую свой возвращенный ответ через JSON и пытаюсь заставить его работать в соответствии со значениями ответа JSON.

Предположим, что ниже приведены значения, которые я возвращаю.

 if ($upload = 1){
    $response['status'] = 1;
    $response['message'] = 'SUCCESS';
    $response['success'] = 'false'; 
}else{
    $response['status'] = 3;
    $response['message'] = 'CATEGORY ASSOCIATED';
    $response['success'] = 'false'; 
}

header('Content-type: application/json');
echo json_encode($response);
 

Я получу его в свою форму и обработаю действие с помощью закодированных ответов.

  $('#form').on('submit', function(e){
    e.preventDefault();
    var id = $('#id').val();
    $.ajax({
        type: "POST",
        url: 'edit.php',
        data: {cid:id},
        success: function(response){
            if(response.status = 1){
                console.log('THE STATUS IS 1');
            }
            else if(response.status = 3){
                console.log('THE STATUS IS 3');
            }
        }
    });
});
 

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю оба ответа на вкладке «Сеть» браузера. консоль выводит состояние 1, но не состояние 3. Где я совершаю ошибку?

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

1. используйте == не = в том состоянии

2. найдите сообщение, в котором описывается разница между = (назначение), == (проверка на равенство) и === (строгая проверка на равенство) … подсказка response.status = 1 ВСЕГДА правдива

3. Строгая проверка помогла. Пожалуйста, опубликуйте это в качестве ответа.

Ответ №1:

Попробуй это…..

  $('#form').on('submit', function(e){
    e.preventDefault();
    var id = $('#id').val();
    $.ajax({
        type: "POST",
        url: 'edit.php',
        data: {cid:id},
        success: function(response,status){
            if(status == 1){
                const newres = JSON.parse(response);//parse the response 
                if(newres.status == 1)
                console.log('The status is 1');
                else if (newres.status == 3) 
                console.log('The status is 3');
            }
            else {
                console.log('No response');
            }
        }
    });
});
 

json_encode($response); Это строка формата json, разбор делает ее объектом.

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

1. Пожалуйста, объясните, почему я хотел бы сделать его объектом, когда я могу выполнить задачу, используя — if(response.status === 1){} как это.

2. можете ли вы объяснить мне, как вы можете этого достичь, if(response.status === 1) поскольку я знаю, что код json_encode будет выглядеть как {"status":1,"message":"SUCCESS","success":"false"} [в вашем случае], который является строковым форматом json.

3. возможно, кодирование json возвращает значение INT, и я строго ищу значение INT, используя === в своем JS. двойной оператор пропускает его.

4. О, хорошо, это поиск целого числа, я думал, вы хотите получить доступ к элементам объекта, в любом случае это может помочь получить доступ к другим 2 элементам.