Я использую функцию 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; }
}
Вы не используете 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!");
}
});
Информация:
jQuery c# Webmethod
в Google. UDPATE
Потому что Али хочет конкретно знать, почему с response.end
и без этого он терпит неудачу. Потому что с response.end
будет завершен запрос. Таким образом, код футер-кода не выполняется. Это означает, что HTML не отображается. Без этого кода HTML визуализируется и также реагирует как ответ. Это означает, что JSON + HTML является результатом запроса.
Отправляет весь текущий буферизованный вывод клиенту, останавливает выполнение страницы и вызывает событие EndRequest.
Поскольку Response.end
выдает исключение, указанное в документации (см. Выше). Лучше использовать HttpContext.Current.ApplicationInstance.CompleteRequest
Я не знаю точной отдачи от руки, но идея состоит в том, что ваши веб-формы (.aspx) используют жизненный цикл страницы. Если вы не закончите жизненный цикл, вызвав Response.End()
, страница продолжит обработку и передачу в выходной поток.
Таким образом, он в конечном итоге достигнет стадии рендеринга и выпишет содержимое файла.asxp, если вы не сообщите ASP.NET о прекращении вывода в поток ответов.
Попробуйте использовать Fiddler для просмотра полученного ответа /html, если вы не вызываете Response.End()
чтобы увидеть, что возвращается.
(И также, что @Niels said-- мой ответ больше для реализации без аякса)
[WebMethod()]
, создать веб-сервис или создать страницы, которые будут отправлять ответ, который вы ищете. Обработчики, связанные с определенным URL-адресом, также могут работать для вас, но эти решения не очень хороши для ясности. Похоже, что вашей главной проблемой может быть отсутствие доступа к сессионному состоянию?