Без Response.End () код не работает нормально

0

Я использую функцию jquery ajax, я получаю данные в функции успеха, если место Response.End() на стороне сервера я didnot понять, в чем причина этого????

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            url: "WebForm1.aspx",
            type: "POST",
            datatype: "json",
            success: function(data) {

                alert(reuslt.CustomerID);

            }
        });
    });

В WebForm1.aspx

protected void Page_Load(object sender, EventArgs e)
        {
            Customer c = new Customer();
            c.CustomerID = "1";
            c.ContactName = "Jhon";
            c.CompanyName = "Dell";
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            String response = serializer.Serialize(c);
            Response.Write(response);
            Response.End();

          }

Класс клиента

public class Customer
    {
        public string CustomerID { get; set; }
        public string CompanyName { get; set; }
        public string ContactName { get; set; }

    }
  • 0
    msdn.microsoft.com/en-us/library/ms524629(v=vs.90).aspx Я не разработчик для C #, но есть вероятность, что какой-то другой код не сможет вывести что-то, что сделает ваш json недействительным. Он немедленно прерывает запрос и возвращает то, что было сгенерировано до настоящего времени, в браузер.
  • 0
    Откройте вкладку Dev Tools Network и посмотрите, что сервер отправляет вам.
Показать ещё 4 комментария
Теги:

2 ответа

2
Лучший ответ

Вы не используете Web-метод, что означает, что файл.aspx все равно дает ответ HTML. Response.end() завершает ответ, что означает, что дальнейший код не выполняется.

Что вам нужно сделать:

В файле VB:

[System.Web.Services.WebMethod(BufferResponse=false)]
public Customer getCustomer()
{
   //implementation code
   return new Customer(); // The code you need
}

JQuery:

    $.ajax({
                type: "POST",
                url: "WebForm1.aspx/getCustomer", // Webmethod function here
                data: {},
                contentType: "application/json;charset=utf-8",
                dataType: "json",
                async:false,
                success: function (json) {
                    var msg = JSON.parse(json.d);
                    alert(msg.customerID);
                },
                failure: function () {
                    alert("Sorry,there is a error!");
                }
            });

Информация:

  1. WebMethod
  2. qaru.site/questions/6934286/...
  3. Более подробную информацию можно найти по поиску jQuery c# Webmethod в Google.

UDPATE
Потому что Али хочет конкретно знать, почему с response.end и без этого он терпит неудачу. Потому что с response.end будет завершен запрос. Таким образом, код футер-кода не выполняется. Это означает, что HTML не отображается. Без этого кода HTML визуализируется и также реагирует как ответ. Это означает, что JSON + HTML является результатом запроса.

Отправляет весь текущий буферизованный вывод клиенту, останавливает выполнение страницы и вызывает событие EndRequest.

Поскольку Response.end выдает исключение, указанное в документации (см. Выше). Лучше использовать HttpContext.Current.ApplicationInstance.CompleteRequest

  • 0
    я не хочу использовать веб-метод я просто хочу знать, почему Response.End () делает мой код работает нормально
  • 0
    обновил ответ.
1

Я не знаю точной отдачи от руки, но идея состоит в том, что ваши веб-формы (.aspx) используют жизненный цикл страницы. Если вы не закончите жизненный цикл, вызвав Response.End(), страница продолжит обработку и передачу в выходной поток.

Таким образом, он в конечном итоге достигнет стадии рендеринга и выпишет содержимое файла.asxp, если вы не сообщите ASP.NET о прекращении вывода в поток ответов.

Попробуйте использовать Fiddler для просмотра полученного ответа /html, если вы не вызываете Response.End() чтобы увидеть, что возвращается.

(И также, что @Niels said-- мой ответ больше для реализации без аякса)

  • 0
    но как решить мою проблему без использования веб-метода и Response.End ()
  • 0
    веб-формы не работают таким образом. Вам нужно будет либо использовать [WebMethod()] , создать веб-сервис или создать страницы, которые будут отправлять ответ, который вы ищете. Обработчики, связанные с определенным URL-адресом, также могут работать для вас, но эти решения не очень хороши для ясности. Похоже, что вашей главной проблемой может быть отсутствие доступа к сессионному состоянию?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню