处理jQuery Ajax方法引发的错误

我有一个页面,我在其中使用jQuery ajax方法来调用一个简单的Web服务,它将从数据库中获取一些数据并将其绑定到页面中的某些控件。 在select的onchange事件上调用ajax方法(这里的HTTP请求是POST)。 以下是jQuery ajax方法

function CallAjax(url, jsonData, SucessFunction, FailurFunction) { $.ajax({ type: "POST", url: url, data: jsonData, contentType: "application/json; charset=utf-8", dataType: "json", success: SucessFunction, error: function(){ alert('error occured'); } }); 

}

上述方法的URL是somepage.aspx / getDataFromDatabse,其中getDataFromDatabse是webservice方法。 我们的测试人员正在使用burp套件测试页面。 当他们直接在浏览器中访问URL(www.example.com/somepage.aspx/getDataFromDatabse)时,burp套件中显示的HTTP方法是GET,并且引发错误并且用户被重定向到相应的页面。 但是当他们直接访问上述URL并拦截burp suite中的请求并将GET请求更改为POST请求时,以下错误消息将直接显示在浏览器中:

{“Message”:“处理请求时出错。”,“StackTrace”:“”,“ExceptionType”:“”}

上面的ajax函数中的“错误”没有被执行,并且没有显示警告框,我们能够处理错误。 如何处理此类错误并将用户重定向到自定义页面?

看起来你的服务器的响应是一个有效的JSon响应,尽管它包含(你)读取的错误。 因此, $.ajax(...)调用将响应处理为成功,而不是错误。

您可以返回有效的JSon响应,并在该响应中指示是否存在错误,以及任何其他信息,例如用户友好的错误消息,重定向URL等。

error: $.ajax(...)调用的处理程序应该用于实际的服务器响应错误(即未处理的500错误,超时等)

例如,您成功的JSon响应可能类似于:

 { success: true, errorMessage: null, errorRedirectUrl: null, data: { .... your successful data response .... } } 

你失败的JSon响应(例如由于validation问题,而不是服务器故障)将如下所示:

 { success: false, errorMessage: 'There was an error processing the request.', errorRedirectUrl: 'http://....someurl...', data: null } 

然后在$.ajax(....)调用的success:选项中检查response.success == true ,并正确处理。

通过具有单一,一致的结构, success: option处理所有完成的ajax请求,然后确定是否存在处理错误以及如何处理它,例如向用户显示警报,将它们重定向到URL等。 ..

相比之下, error:选项只处理那些没有带回你可以使用的响应的ajax请求。

更新:

在您的服务器上,您已经在处理接收GET http请求和POST http请求之间的区别。 因此,我认为您的问题是您还需要检测POST请求是否包含webservice方法所需格式的有效数据。

因此,您的Web服务需要确定http请求中的POSTed数据是否采用它希望接收的格式,如果不返回HTTP重定向响应(302)而不是返回错误。

你可以用两种方式做到这一点:

  1. 使用Try... Catch...块。 您的webservice方法似乎已抛出exception并返回它,因此捕获它然后而不是返回它,设置并返回302响应。

  2. 如果对Web服务的真正调用可以在正常操作下生成exception(这通常很糟糕!),您需要validation请求中收到的数据,看看它是否是Web服务方法预期接收的内容(是否收到数据?是吗? ajax请求发送的正确结构?等)

注意:如果请求确实包含有效数据,那么没有简单的方法来检测这是来自真正的源(ajax调用)还是来自其他方式的伪造请求。 有解决方案,但它们涉及,可能需要多次调用validation等。