Я использую JQuery для создания AJAX для локальной службы. Моя локальная служба - HttpHandler (например, Request.ashx). В Request.ashx, это обязанность сделать вызов внешнего веб-сайта (например, CallExternalWebsite()). CallExternalWebsite() использует .NET System.Net.WebRequest() для инициирования запроса. Когда к внешнему веб-сайту обращаются, ни события успеха, ни ошибки не запускаются. (Примечание: Кроме того, я попробовал этот сервис WCF размещенный в IIS, я вижу те же результаты.)Событие Ajax Success не срабатывает при вызове службы
Здесь находятся два сценария:
Этот сценарий работает:
- В ProcessRequest (), комментариев callExternalWebsite().
- Для объекта o, инициализируйте данные, чтобы имитировать результаты.
- Click on myButton
- Событие успеха срабатывает на клиенте.
- В Fiddler я вижу информацию заголовка. Я вижу JSon результат и т.д.
Этот сценарий не работает:
- В ProcessRequest(), включить призыв к callExternalWebsite().
- Для объекта o callExternalWebsite() вернет соответствующий объект.
- Click on myButton
- Событие успеха не пожары на клиенте.
- В Fiddler я вижу информацию заголовка. Я вижу результат Json и т. Д.
- Я знаю, что callExternalWebsite() работает, потому что у меня есть отправка результатов на мой телефон.
Чтобы подвести итог, внешний HTTP-вызов внутри HttpHandler производит событие Ajax success.
Вот отрывок из AJAX вызова: (я пробовал разные interations)
$(document).ready(function() {
$("#myButton").click(function (event) {
$.ajax({
cache: false,
type: "POST",
url: "http://localhost/Service/Request.ashx",
data: '{"id" : "053252f3"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 20000,
success: function (msg) {
AjaxSucceeded(msg);
},
error: AjaxFailed
});
});
});
В HttpHandler Request.ashx,
public Void ProcessRequest(httpContent context)
{
// Do some stuff....
// Make call to external web site
object o = callExternalWebsite (Uri, Data, "POST");
// Return results from callOtherWebsite
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
string json = javaScriptSerializer.Serialize(o);
context.Response.ContentType = "application/json";
context.Response.Write(json);
}
Любые мысли?
Спасибо.
Стив
Вы уверены, что ответ HTTP 200/OK? Я считаю, что только коды состояния 2xx считаются «Успехом» –
. Можете ли вы опубликовать код в «AjaxSucceeded»? Может быть, там проблема. Попробуйте изменить вызов успеха на «alert (« hello! »)» Или аналогично подтверждать, что ветка успеха не выполняется. –
Я изменил успех на: 'success: function (msg) {alert (" hello "); } ' , но все равно не выполнялся. Вот ответ от вызова Request.ashx: 'HTTP/1.1 200 OK Cache-Control: private Content-Type: application/json; charset = utf-8 Сервер: Microsoft-IIS/7.5 X-AspNet-версия: 4.0.30319 X-Powered by By: ASP.NET Дата: Пт, 13 апр 2012 16:28:40 GMT Content- Длина: 84' Все кажется прекрасным. – Steve