处理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)而不是返回错误。
你可以用两种方式做到这一点:
-
使用
Try... Catch...
块。 您的webservice方法似乎已抛出exception并返回它,因此捕获它然后而不是返回它,设置并返回302响应。 -
如果对Web服务的真正调用可以在正常操作下生成exception(这通常很糟糕!),您需要validation请求中收到的数据,看看它是否是Web服务方法预期接收的内容(是否收到数据?是吗? ajax请求发送的正确结构?等)
注意:如果请求确实包含有效数据,那么没有简单的方法来检测这是来自真正的源(ajax调用)还是来自其他方式的伪造请求。 有解决方案,但它们涉及,可能需要多次调用validation等。
- 如何使用JQuery Ajax Call从Web方法发送和检索数据?
- 如何在asp.net mvc 4模型对话框中发布用户动态添加的数据
- 复选框选中复选框背景颜色并取消选中
- 从C#后面的ASP.NET代码调用jQuery函数
- Ajax调用没有调用服务器端,并且在httpxx中显示错误为“在ajax post调用中加载内容错误(NS_ERROR_DOCUMENT_NOT_CACHED)”
- 即时刷新Google Visualization
- 没有Updatepanel / with jQuery的ASP.NET部分页面上传
- jQuery菜单和ASP.NET Sitemap
- 在jquery mobile中提交表单后,PopUp对话框无法正常工作