Web methods OOTB handles error at client you just need to throw your error message.
Refer Sample Code for your reference below.
At Web Server side web method
[WebMethod]
public List<Models.SubOrdinates> getXXXX(string UserId)
{
try
{
DataTable dt = bal.getSubXXXXOrdinates(UserId).Tables[0];
List<Models.SubXXXXs> SubXXXX = new List<Models.SubXXXXs>();
foreach (DataRow dr in dt.Rows)
{
DateTime dtPeriodStart = DateTime.MinValue;
DateTime dtPeriodEnd = DateTime.MinValue;
if (DateTime.TryParse(dr["PeriodStart"].ToString(), out dtPeriodStart) && DateTime.TryParse(dr["PeriodEnd"].ToString(), out dtPeriodEnd))
{
SubOrdinates.Add(new Models.SubOrdinates()
{
PeriodStart = dtPeriodStart,
PeriodEnd = dtPeriodEnd
});
}
}
return SubOrdinates;
}
catch (Exception ex)
{
string ErrorCode = util.WriteLog(ex.Message);
throw new Exception("An Error has occured with Error Code : " + ErrorCode + " Please contact support team");
}
}
At Client
$.ajax({
type: "POST",
url: "wsGetData.asmx/getXXXXXX",
data: JSON.stringify({ UserId: userId }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: CallBackFunction,
error: function (xhr, status, error) {
var exception = JSON.parse(xhr.responseText);
ErrorMessageModel('Error', exception.Message);
},
failure: function (response) {
ErrorMessageModel('Error', response.d);
}
});