Как получить данные из C # Webmethod через код состояния AJAX? - PullRequest
0 голосов
/ 15 октября 2018

Я разрабатываю код, чтобы проверить, существуют ли данные на сервере или нет.В случае конфликта программа должна вернуть код состояния 409. Я могу получить данные, возвращаемые веб-методом, через ajax.success.Однако я не могу получить данные через ajax.statusCode.Всегда возвращается ошибка:

Ошибка типа: данные не определены

Я пытался это , но я получил ошибку

Невозвратный элемент «Содержимое» нельзя использовать как метод

Как получить объект через ajax.statusCode?

C #:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static Case CreateNewCase(int id)
 {
     try
     {
        Case caseResponse = new Case();

        //some process about checking if the ID exists and loading other data

        if(idCount > 0)
        {
            HttpContext.Current.Response.StatusCode = 409;
            return caseResponse;
        }
        else
        {
            HttpContext.Current.Response.StatusCode = 200; 
            return caseResponse;
        } 
     }
     catch (Exception ex)
     {
         HttpContext.Current.Response.StatusCode = 500;
         return null;
     }
}

JS:

function newCase() {

$.ajax({
    url: 'Default.aspx/CreateNewCase',
    data: JSON.stringify(
        {id: ID }
    ),
    dataType: "json",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    statusCode: {
        409: function (data, response) {
             //how do I get the "data" from WebMethod here?
             loadCase(ID, data);
             //TypeError: data is undefined
        }
    },
    success: function (data, status) {
        loadCase(ID, data);
    },
    error: function (data) {
    }
});
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Если вы хотите использовать веб-метод, измените ajax и попытайтесь проанализировать ошибку в функции errro, как показано ниже

function newCase() {

$.ajax({
   url: 'Default.aspx/CreateNewCase',
   data: JSON.stringify(
    {id: ID }
   ),
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",    
success: function (data, status) {
    loadCase(ID, data);
},
error: function (jqXHR, textStatus, thrownError) {
   if(jqXHR.status =="409" ){
   var data= jqXHR.responseJSON;
    loadCase(ID, data);
   }
   else 
   {
   console.log(textStatus);
   }    
  }
  });
 }
0 голосов
/ 15 октября 2018

Вы можете сделать это так.Используйте веб-API вместо веб-метода и возвращайте HttpResponseMessage вместо регистра

public HttpResponseMessage CreateNewCase(int id)
{
 try
 {
    Case caseResponse = new Case();

    //some process about checking if the ID exists and loading other data

    if(idCount > 0)
    {
       return Request.CreateResponse( HttpStatusCode.Conflict, caseResponse );
    }
    else
    {
     return Request.CreateResponse( HttpStatusCode.OK, caseResponse );
    } 
 }
 catch (Exception ex)
 {
    return Request.CreateResponse( HttpStatusCode.InternalServerError, null);
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...