AngularJS: при проверке object null возвращает неверное сообщение

#javascript #angularjs

#javascript #angularjs

Вопрос:

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

Когда я проверяю, есть ли какие-либо данные в ответе:

 if (response.data === null)
  

Похоже, что эта часть не соблюдается, и отображается предупреждение об обновлении при успешной записи, и если вы посмотрите на снимок экрана, ответ.данные равны нулю.

Я не уверен, почему простое if не работает, или я неправильно просматриваю объект ответа.

Может кто-нибудь, пожалуйста, протянуть руку помощи, чтобы я мог понять наилучшую практику того, как это сделать?

Спасибо.

ОБНОВЛЕННОЕ ИЗОБРАЖЕНИЕ

введите описание изображения здесь

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

1. вам нужно if (response.data === null) . В данный момент вы проверяете наличие строки ‘null’.

2. привет, jjenzz, пожалуйста, посмотрите мой обновленный снимок экрана.

3. Написанный вами код сообщает, что он должен быть успешным, когда нет никаких данных… Похоже, что вы действительно хотите if (response.data !== null)

4. да, вы правы. если данных нет, перейдите к оповещению «Мы сожалеем».

5. Вы снова обновили скриншот, но на этот раз до if (!response.data) { того, что вам нужно if (response.data) { . Вы сказали в своем OP: «Когда я проверяю, есть ли какие -либо данные в ответе:» но то, что вы сказали, и то, что вы закодировали, — это две разные вещи: P

Ответ №1:

Вы можете проверить, используя только:

 if ( response.data )
  

Эта проверка, если:

  • null

  • false

  • не определено

  • 0

  • NaN

  • пусто («»)

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

1. Привет, Лукас Коста, я попробовал вашу рекомендацию и обновил снимок экрана. Пожалуйста, если у вас есть возможность, взгляните.

Ответ №2:

Я не уверен, почему ваш не работает, можете ли вы сделать следующее и попробовать.

 if(response amp;amp; response.data === null amp;amp; typeof response.data === "object")
  

Ответ №3:

Вам нужно искать значение null , а не строку "null «.

В вашем сообщении вы использовали response.data === null , но на скриншоте вы делаете response.data === 'null' . Это проверка на строковое значение 'null' , этого не произойдет! Отредактируйте if инструкцию на скриншоте, чтобы она выглядела так, как в вашем сообщении 😉

Следующее, что нужно сделать, это заключить весь блок в фигурные скобки.

Прямо сейчас ваш код эквивалентен:

 if (response.data === null) {
    $scope.pages = response.data;
}
alert("....");
clearFields();
  

Поместите весь желаемый код в блок:

 if (response.data === null) {
    $scope.pages = response.data;
    alert("....");
    clearFields();
}
  

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

1. Я обновил снимок экрана. Я делал разные попытки, я также пробовал response. данные === не определены, но не пошли по правильному пути.

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

3. я добавил фигурные скобки к проверке if, и это дает тот же результат. Пожалуйста, посмотрите на обновленный снимок экрана.

4. Хорошо, следующее, что вам нужно сделать, это скопировать и вставить код в свой вопрос вместо того, чтобы показывать нам скриншот, потому что он нуждается в серьезных правках, и никто не хочет (или должен) перепечатывать все это, лол.

Ответ №4:

Надеюсь, это поможет объяснить, почему вы не получаете ожидаемых результатов (читайте комментарии в коде):

 function boooooom(msg) {
    alert('We're sorry folks! '   msg);
}

$http({
    method: 'PUT',
    url: 'api/StorePage/PutStorePage?StorePageId='   this.newpage.StorePageID,
    data: storePage,
})
    .then(
        // This callback will be called when the response is *available*
        function(response) {
            // Change this to `response.data` instead of `!response.data`
            if (response.data) {
                $scope.pages = response.data;
                alert('Congrats!');
            } else {
                boooooom('No data');
            }
        }, 

        // This callback is called if an error occurs or if the server 
        // returns a response with an *error* status.
        //
        // *Your* request hasn't caused an error as it *has* responded 
        // and the response is a 200 status (which is not an error status) 
        // so this callback doesn't get called.
        function(response) {
            boooooom('Houston we have a problem');
        }
    )
    // It looks like you always want to `clearFields` for both failure and success
    // so you can just do that here, which will do that for you.
    .finally(clearFields);