Объявление объекта Javascript в операторе IF - PullRequest
1 голос
/ 12 апреля 2011

Прошу прощения за название, я просто не знаю, как описать это.

В основном я использую JQUERY / ajax для вызова php-скрипта, чтобы проверить некоторые входные данные и получить некоторые данные. Возвращаемые данные кодируются в формате JSON, поэтому в JQUERY я устанавливаю тип данных JSON, и он возвращает объект.

Я только что обнаружил, что при определенных (надо сказать, необычных) условиях, когда сетевое соединение не отвечает ожидаемым образом, вызов ajax вызывает опцию ошибки в JQUERY.

В большинстве случаев у меня появляется сообщение об ошибке, возвращаемое с сервера, но иногда ошибка достигается, и JSON не возвращается из сценария на стороне сервера. Я еще не выяснил, что именно может спровоцировать эту ситуацию в сети, но в любом случае я думал, что просто разберусь с этим в Javascript, пока я еще не знаю.

Идея состояла в том, чтобы проверить, был ли создан ожидаемый объект, а если нет, то создать его с двумя ожидаемыми свойствами и запустить диалог. Таким образом, я бы избегал повторения написания сообщений об ошибках. Это не большая экономия, но я хотел попробовать принцип.

 $.ajax({
      url: 'getmetadata.php',
      type: "POST",
      data: entereddata,
      dataType: "json",
      timeout: (7000), //wait 7 seconds

        error: function(data) 
        {   
        // handle errors
        if(data)
        {

        // Do nothing error message will be issued from the data object 
        }else{
                    // no message was returned. Some other error occured.
            function tempdata()
            { 

                this.errortitle   = "Error title";
                this.errormessage = "Error text";
            };

            var data = new tempdata();
        };  

        // issue error message
        runDialogue(data.errortitle,data.errormessage);

        }, //ERROR

        success: function(data) 
        {
        }; // SUCCESS
}); // AJAX

в приведенном выше коде объект данных должен существовать или не существовать до оператора "if". И когда я доберусь до runDialogue (); данные объекта всегда должны существовать для передачи свойств errortitle и errordescription.

Когда объект «данные» существует, проблем нет. Что не работает, так это когда объект «data» не существует, то есть если не проходит тест «if». Остальное должно создавать объект «данные», но не создает.

Что я сделал не так?

Ответы [ 3 ]

3 голосов
/ 12 апреля 2011

Вы переопределяете переменную data в своем блоке else (более конкретная область действия), и, следовательно, глобальная переменная области действия по-прежнему не определена. Изменить var data = новые tempdata (); до

data = new tempdata(); //In the else block

Итак, теперь ваш ajax-вызов должен выглядеть следующим образом:

$.ajax({
          url: 'getmetadata.php',
          type: "POST",
          data: entereddata,
          dataType: "json",
          timeout: (7000), //wait 7 seconds

            error: function(data) 
            {   
            // handle errors
            if(data)
            {

            // Do nothing error message will be issued from the data object 
            }else{


                /******************NOTE THE CHANGE HERE********************/
                data = { 

                    errortitle:"Error title",
                    errormessage:"Error text"
                };

            };  

            // issue error message
            runDialogue(data.errortitle,data.errormessage);

            }, //ERROR

            success: function(data) 
            {
            }; // SUCCESS
    }); // AJAX
0 голосов
/ 12 апреля 2011

При сбое $ .ajax (из-за ошибки HTTP) вызывается метод .error и передаются следующие параметры: ошибка (jqXHR, textStatus, errorThrown)

Таким образом, первый параметр, который вы назвали «данными», - это не «то, что веб-сервер отправил вам», а объект xmlhttprequest, завернутый в jquery. Тестирование через «if» [например, if (data)] всегда будет возвращать true.

0 голосов
/ 12 апреля 2011

Javascript выдает ошибку по неопределенным ссылкам;Вы не можете проверить существование, просто используя объект.Вы можете использовать оператор typeof, чтобы проверить, существуют ли данные, или вместо этого, имеют ли они тип "объект".

Например:

if (typeof data === "undefined")
{
   // You don't really need a closure for this...
   errordata = {'errortitle'   : 'Error Title',
                'errormessage' : 'Error Message'};

 runDialogue(data.errortitle, data.errormessage);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...