Javascript jQuery错误函数不调用asp.net

Javascript jQuery错误函数不调用asp.net,javascript,jquery,asp.net,asp.net-mvc,Javascript,Jquery,Asp.net,Asp.net Mvc,我使用Jquery和Asp.NETWeb服务,我有一个表单im使用jQueryAjax功能将数据传递给web服务 我的问题是,当im在webmethod中注释一个sqlparameter时,它将给我一个异常,但这不会调用我的jquery onError函数,它将始终(不管是否存在异常)调用OnSuccess函数 原因是什么 im使用Newtonsoft将响应序列化为json格式 请帮帮我 这是我的客户端脚本 <script type="text/javascript"> $(doc

我使用Jquery和Asp.NETWeb服务,我有一个表单im使用jQueryAjax功能将数据传递给web服务

我的问题是,当im在webmethod中注释一个sqlparameter时,它将给我一个异常,但这不会调用我的jquery onError函数,它将始终(不管是否存在异常)调用OnSuccess函数

原因是什么

im使用Newtonsoft将响应序列化为json格式

请帮帮我 这是我的客户端脚本

<script type="text/javascript">

$(document).ready(function (){

    var progressOptions={

        steps: 20,
        stepDuration: 20,
        max: 100,
        showText: true,
        textFormat: 'percentage',
        callback: null,
};
 $('#Waitdialog').dialog({

        autoOpen:false,
        width: 300,
        height:150,
        modal: true,
        resizable: false,
        closeOnEscape:false,
        open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); },
        position:"center",
        draggable:false,
        title:"Done",
        close:false,
        buttons: {
            "Ok": function() {
             $(this).dialog("close");
            }

      }
    });
$("#submit").click(function(){
$("#ProgressBar").progressbar({

        value:50,
        steps: 20,
        step_duration: 20,
        max: 100,
        height: 12,
        showText: true,
        textFormat: 'percentage',
        callback: null,

$(文档).ready(函数(){
var期权={
步骤:20,
持续时间:20,
最高:100,
showText:true,
textFormat:'百分比',
回调:null,
};
$('#Waitdialog')。对话框({
自动打开:错误,
宽度:300,
身高:150,
莫代尔:是的,
可调整大小:false,
closeOnEscape:错误,
打开:函数(事件,ui){$(“.ui对话框标题栏关闭”).hide();},
位置:“中心”,
可拖动:错误,
标题:“完成”,
关闭:错误,
按钮:{
“Ok”:函数(){
$(此).dialog(“关闭”);
}
}
});
$(“#提交”)。单击(函数(){
$(“#ProgressBar”).ProgressBar({
价值:50,
步骤:20,
步骤u持续时间:20,
最高:100,
身高:12,
showText:true,
textFormat:'百分比',
回调:null,
}))

var name=$(“#txtName”).val();
var userID=$(“#txtUserName”).val();
var email=$(“#txtEmail”).val();
var部门=$(“#cmbDep”).val();
var password1=$(“#txtPassword”).val();
var password2=$(“#txtPassword”).val();
$.ajax({
async:false,
cache:false,
类型:“POST”,
url:“http://localhost:4055/ShareMe/logon.asmx/HelloWorld",
数据:“{name:“+name+”,“userID:“+userID+”,“email:“+email+”,“department:“+department+”,“password1:“+password1+”,“password2:“+password2+”,”,
//数据:“{'funcParam':'”+$('#form1')。序列化()+“}”,
//数据:“{name:“+name+”,“userID:“+userID+”,“email:“+email+”,“department:“+department”},”
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:一旦成功,
错误:OnError
});
返回false;
函数OnSuccess(){
$(“#Waitdialog”).dialog('open');
}
函数OnError(xhr、desc、exceptionobj){
警报(xhr.responseText);
console.log(xhr.responseText);
控制台日志(desc);
console.log(exceptionobj除外);
}
});
});
这就是我的ASP.net webmethod

<WebMethod()> _
<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
Public Function HelloWorld(ByVal name As String, ByVal userID As String, ByVal email As String, ByVal department As String, ByVal password1 As String) As String

    Try
        Dim param(6) As SqlParameter
        param(0) = New SqlParameter("@RefId", 1)
        param(1) = New SqlParameter("@Name", name)
        param(2) = New SqlParameter("@UserName", userID)
        param(3) = New SqlParameter("@Email", email)
        param(4) = New SqlParameter("@Department", department)
        param(5) = New SqlParameter("@Password", password1)
        param(6) = New SqlParameter("@CreatedBy", "")

        SqlHelper.ExecuteNonQuery(connStringShareMe, Data.CommandType.StoredProcedure, "Users_Insert", param)

        Return "Done"
    Catch ex As Exception

        Return JavaScriptConvert.SerializeObject(ex.Message)
    End Try

End Function
_
_
公共函数HelloWorld(ByVal name作为字符串,ByVal userID作为字符串,ByVal email作为字符串,ByVal department作为字符串,ByVal password1作为字符串)作为字符串
尝试
尺寸参数(6)作为SqlParameter
参数(0)=新的SqlParameter(“@RefId”,1)
param(1)=新的SqlParameter(“@Name”,Name)
param(2)=新的SqlParameter(“@UserName”,userID)
参数(3)=新的SqlParameter(“@Email”,Email)
param(4)=新的SqlParameter(“@Department”,Department)
param(5)=新的SqlParameter(“@Password”,password1)
param(6)=新的SqlParameter(“@CreatedBy”,”)
SqlHelper.ExecuteOnQuery(connStringShareMe,Data.CommandType.StoredProcess,“用户插入”,参数)
返回“完成”
特例
返回JavaScriptConvert.SerializeObject(例如Message)
结束尝试
端函数

jQuery如何知道您发送回的消息是错误的?因为您正在处理(也称为吞咽)异常,所以需要将http响应代码设置为500,通过在异常处理代码中添加以下行来告诉jQuery操作失败

HttpContext.Current.Response.StatusCode = 500

这是因为web方法中的
çatch
子句。
捕获异常并返回结果,因此客户端看不到异常

解决这个问题的一种方法是删除catch子句,并允许将异常抛出到客户端


如果您选择这样做,最好将异常格式化为用户可以理解的内容,以及删除堆栈跟踪/内部异常信息,以便用户无法看到应用程序的内部工作。

其工作方式为删除try and catch块,但如何删除堆栈跟踪/内部异常信息?例如,您可以捕获异常并抛出新异常。这样您就可以控制消息,并且新异常不包含原始异常的堆栈跟踪。但是请注意,要以某种方式记录原始异常,以便准确地知道出了什么问题。正如我在回答中所说的,在catch异常块中添加一行“Response.StatusCode=500”,这将设置状态代码。在vb.net web服务方法中,无法设置Response.StatusCode=500根据MSDN文档,您可以。。。您需要通过HttpContext对象访问它。因此,代码将为“HttpContext.Current.Response.StatusCode=500”
HttpContext.Current.Response.StatusCode = 500