2011-12-18 82 views
3

在什么情况下调用xhr方法的错误?即使响应为200,也会调用错误代码。我正在使用xhrPost方法。Ajax方法中的Dojo错误处理

更新:

dojo.xhrPost({ 
url: url, 
handleAs: respType /* json */, 
content: data, 
load: onServerResponse, 
error: onHttpError 
}) 
function onServerResponse(response, ioArgs) { 
    if(onResponse !== null) { 
     onResponse(response); 
    } 
} 
function onHttpError(error, ioArgs) { 
    if (showHttpError === true) { 
     var errMsg = ""; 
     switch (ioArgs.xhr.status) { 
      case 0: errMsg = "Please check Web Server status."; break; 
      case 404: errMsg = "HTTP (404): Requested Page Not Found"; break; 
      case 500: errMsg = "HTTP (500): The server reported an Error"; break; 
      default: errMsg = "Unhandled HTTP error - " + ioArgs.xhr.status; 
     } 
     ConsoleUtils.showNotificationAlertDialog(errMsg, ConsoleConstants.INFORMATION); 
    } 
} 

这些是从萤火虫响应头:

服务器Apache的狼/ 1.1 内容类型的应用/ JSON;字符集= UTF-8 Transfer-Encoding chunked 日期2011年12月18日18:06:54 GMT

响应主体 {“message”:“Kiosk successfully deleted”,“success”:true}

尽管返回状态为200,但仍会调用警报对话框。

+0

可能的重复[什么是考虑和AJAX请求错误(在Dojo中)?](http://stackoverflow.com/questions/5721949/what-is-considered-and-ajax-request-error-in-dojo ) – hugomg 2011-12-18 18:00:00

+0

感谢您的信息。我用代码片段和萤火虫内容更新了我的问题。 – 2011-12-18 18:51:18

+0

你可以发布你的onResponse方法吗? – Philippe 2011-12-19 11:15:01

回答

0

在您的onServerResponse函数中,您使用了一个名为onResponse的var。 因为你在做:onResponse()我只能猜测onResponse是一个函数。 然后你的测试if(onResponse!== null)看起来不合适,也许你想测试响应。

如果你想测试功能的所有脑干,你可能要检查的typeof onResponse ==“功能”

而且sicne你调用有一个功能,可以确保函数是正确的范围内。 .. 然后你可能想要使用load:dojo.hitch(theScopeWhereOnResponseFunctionExists,onServerResponse)

希望这会有所帮助。

0

我刚和这个问题争了一阵子,找到了解释。

如果你的xhrget返回一个200,但是load函数抛出一个未处理的异常,dojo会把它当作一个错误并调用错误函数。