Uwakpeter Ответов: 3

Как вернуть объект json с сообщением в функцию ajax


Я хочу иметь возможность возвращать объект json с пользовательским сообщением об ошибке/успехе, используя одну и ту же строку кода: у меня есть эти две строки кода:

return Json(data);
    return Json(new { f = "error" });


Я хочу иметь возможность отображать его в одной строке, как это:

return Json(data, Json(new { f = "error" }));


Я буду признателен за любую помощь от любого человека

Что я уже пробовал:

Мой серверный код:

if (getId > 0)
      {
     var getList = appointmentRepository.GetAppointmentList(userId);
     var data = Newtonsoft.Json.JsonConvert.SerializeObject(getList);                       
     return Json(data);
     return Json(new { s = "success" });
     }
     else
      {
      var getList = appointmentRepository.GetAppointmentList(userId);
      var data = Newtonsoft.Json.JsonConvert.SerializeObject(getList);
      return Json(data);
      return Json(new { f = "error" });
     }



Моя Функция Ajax:

<script type="text/javascript">

            $.ajax({
                url: '/Appointment/InsertPatientAppointment/',
                type: "POST",
                data: JSON.stringify({ appointmentDate: $(".datetimepicker").val() }),

                cache: false,
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (_data) {
                    if (_data.f !== undefined) {
                        swal({
                            title: "Failed!",
                            text: _data.f,
                            type: "info"
                        });
                        table.clear().draw();
                        return false;
                    }
                    else {
                        swal({
                            title: "Success!",
                            text: _data.s,
                            type: "success"
                        });

                    }
                }
            });
        });
    });

</script>

F-ES Sitecore

Ваш код не имеет смысла, "возврат" останавливает выполнение кода, поэтому код после него никогда не будет выполняться.

Uwakpeter

да, я знаю, сэр, это не может сработать, я хотел сказать, что хочу иметь возможность отображать и то, и другое в одной строке кода.

3 Ответов

Рейтинг:
2

Vincent Maverick Durano

В коде не может быть нескольких операторов return. Если вы хотите вернуть данные с сообщением, то вам нужно создать пользовательский объект, который объединяет и переносит как ваши данные, так и пользовательское сообщение, а затем возвращает этот объект. Например, вы можете создать пользовательский объект, например:

public class MyCustomResponse
{
    public object Data { get; set; }
    public string Message { get; set; }
}


Затем в вашем контроллере вы можете вернуть этот объект следующим образом:

var data = Newtonsoft.Json.JsonConvert.SerializeObject(getList); 
var response = new MyCustomResponse(){
	Data = data,
	Message = "Successful"
};

return Json(response);


Возможно, вы тоже захотите прочитать эту статью:
ASP.NET ядро и веб-API: Пользовательская оболочка для управления исключениями и согласованными ответами[^]


Uwakpeter

Как я могу использовать это в функции ajax?

Vincent Maverick Durano

Вы все еще можете использовать существующий AJAX-код, за исключением того, что данные доступны через:

_data.f.Data и _data.f.Message

Рейтинг:
10

Uwakpeter

В конце концов я смог решить эту проблему шагами ниже:

Я интегрировал объект данных в свой анонимный объект, который я уже возвращаю:

return Json(new {data = data, f = "error"});


Затем получите доступ к объекту данных в моем вызове ajax следующим образом:

success: function (_data) {
    var returnedData = _data.data;
}


Это означает, что я должен настроить вызов метода map там, где я готовлю массив данных для таблицы. Вместо:

var arr = $.map(JSON.parse(_data), function (el) { return el });


Затем вызовите его с помощью объекта данных _data.data:

var arr = $.map(JSON.parse(_data.data), function (el) { return el });


Это действительно сделало трюк для меня.


Рейтинг:
0

MadMyche

Есть два различных метода, которые я использую для доставки данных, а также сообщения "статус". Выбор метода для использования основывается на каждом конкретном случае.

Метод easiset будет заключаться в использовании "составного" объекта; упаковка данных и состояния в новый объект. Вы также можете использовать для этого класс incorporate a. Недостатком этого метода является то, что он потребует еще одного шага в разборе фактического JSON, который вы хотите
return Json(new { ReturnStatus = "error", ReturnData = data });

Второй метод был бы немного сложнее, и он состоял бы в том, чтобы использовать объект ответа либо с помощью пользовательских заголовков, либо с помощью сообщений о состоянии. Недостатком этого является то, что ваши функции AJAX должны быть расширены, чтобы вытащить информацию.
Ответ сервера AJAX XMLHttpRequest[^]


Uwakpeter

да, это должно сработать, я пробовал это раньше, но это имеет тенденцию создавать еще одну проблему, вставленная запись больше не отображается автоматически в datatable до тех пор, пока страница не будет обновлена вручную, есть ли способ, которым я также могу сделать ее такой же, как раньше, с помощью приведенной выше строки кода?

MadMyche

Без соответствующего кода (getID, GetAppointmentList) трудно определить, почему ваша программа не показывает обновленную информацию