.NET(ApiController)/jQuery.ajax: что вернуться с POST?

В методе Post в контроллере, полученном из ApiController, что мне следует возвращать, чтобы указать успех jQuery?

Я пробовал HttpResponseMessage, но jQuery видит это как ошибку (хотя аргумент обработчика ошибок jQuery явно имеет статус 200).

JQuery выглядит так:

processParticipantEvent: function(parID, evtType, evtNotes, successFunction, errorFunction){
    debugger;
    var requestURL = '/api/participantevent';
    var json = {"parId" : parID, "evtType": evtType, "evtNotes": evtNotes};
    var jsonArray=JSON.stringify(json);
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: requestURL,
        data: jsonArray ,
        dataType: "json",
        success: function (data) { successFunction(data); },
        error: function (data) { errorFunction(data); }
    });
},

Я прочитал это: Ajax-запрос возвращает 200 OK, но событие с ошибкой запускается вместо успеха, похоже, что он касается одной и той же проблемы, но я подозреваю, что это из-за данных, поскольку это не сработает для меня?

Чтобы быть ясным, все, что я хочу сделать, это вернуть простой старый 2xx без данных.

2
14 сент. '15 в 0:46
источник поделиться
5 ответов

Как уже упоминалось @Beyers, возврат с OK() работает.

Здесь я создал ту же структуру и работал.

Мой контроллер имеет следующее:

[Route("api/participantevent")]
public IHttpActionResult Test()
{
    return Ok("");
}

И у клиента я изменил вашу функцию просто, чтобы упростить:

processParticipantEvent= function(){
    debugger;
    var requestURL = '/api/participantevent';
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: requestURL,
        data: [{'test': '1'}] ,
        dataType: "json",
        success: function (data) { alert('success'); },
        error: function (data) { alert('error'); }
    });
}
2
16 сент. '15 в 2:14
источник

Согласно документации:

"json": оценивает ответ как JSON и возвращает объект JavaScript. Кросс-доменные запросы "json" преобразуются в "jsonp", если запрос не включает jsonp: false в его параметрах запроса. Данные JSON обрабатываются строгим образом; любой отклоненный JSON отклоняется и возникает ошибка синтаксического анализа. Начиная с jQuery 1.9, пустой ответ также отклоняется; сервер должен вернуть ответ null или {}.

Поэтому, если вы хотите использовать jQuery ajax, вам нужно вернуть правильную строку json, просто используйте в контроллере API следующее:

return Ok(new {});

Обратите внимание, что это функция jQuery ajax, используя Angular, например, для записи ajax, я могу использовать return Ok(); внутри моего контроллера и все работает так, как ожидалось.

3
16 сент. '15 в 1:55
источник

Кажется, что если вы получите ответ OK, это, вероятно, недействительный JSON. Я бы рекомендовал вам проверить HTTP-ответ в браузере и попытаться запустить JSON.parse с помощью responseText и посмотреть, не сработает ли он.

0
16 сент. '15 в 1:59
источник
  1. Обычно я объявляю класс, как показано ниже:

    публичный класс AjaxResult
    {

    private bool success = true;
    private List<string> messages;
    
    public bool Success { get { return success; } set { success = value; } }
    public List<string> Messages { get { return messages; } }
    
    public AjaxResult()
    {
        messages = new List<string>();
    }
    

    }

  2. В контроллере действие (к которому выполняется запрос ajax) должно иметь JsonResult в качестве типа возврата.

    [HttpPost]
    public JsonResult Action(string id)
    {
        AjaxResult result = new AjaxResult();
        //Set the properties of result here...
        result.Success = true;
        result.messages.Add("Success");
        return Json(result);
    }
    

3. И ваш вызов ajax будет выглядеть так:

    $.ajax({
        type: "POST",
        dataType: 'json',
        url: /ControllerName/Action,
        data: { id: "Test"},
        success: function (data) { alert('success'); },
        error: function (data) { alert('error'); }
   });
0
17 сент. '15 в 23:46
источник

Ваша ошибка requestURL с requestURL. Его значение абсолютное, а http://api/participantevent не существует. Попробуйте использовать относительное значение.

var requestURL = './api/participantevent';
0
14 сент. '15 в 0:59
источник

Посмотрите другие вопросы по меткам или Задайте вопрос