我对标题感到抱歉我不知道如何描述这个标题。
基本上我使用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”但不是。
我做错了什么?
答案 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。