IF语句中的Javascript对象声明

时间:2011-04-11 20:23:11

标签: javascript json object

我对标题感到抱歉我不知道如何描述这个标题。

基本上我使用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属性。

当“数据”对象存在时,没有问题。什么不起作用的是“数据”对象不存在,即如果未通过“if”测试。 else应该创建对象“data”但不是。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

重新定义您的else块中的变量数据(更具体的范围),因此全局范围变量仍将是未定义的。 更改var data = new 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

答案 1 :(得分:0)

Javascript在未定义的引用上抛出错误;你不能只使用对象测试存在。您可以使用typeof运算符来测试数据是否存在,或者是否为“object”类型。

例如:

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);
}

答案 2 :(得分:0)

当$ .ajax失败时(由于HTTP错误),调用.error方法并传递以下参数: 错误(jqXHR,textStatus,errorThrown)

所以第一个参数,你称之为“数据”,不是“网络服务器发送给你的东西”,而是一个jquery包装的xmlhttprequest对象。通过“if”测试它[例如if(data)]将始终返回true。