2012-04-13 2 views
1

Я использую JQuery для создания AJAX для локальной службы. Моя локальная служба - HttpHandler (например, Request.ashx). В Request.ashx, это обязанность сделать вызов внешнего веб-сайта (например, CallExternalWebsite()). CallExternalWebsite() использует .NET System.Net.WebRequest() для инициирования запроса. Когда к внешнему веб-сайту обращаются, ни события успеха, ни ошибки не запускаются. (Примечание: Кроме того, я попробовал этот сервис WCF размещенный в IIS, я вижу те же результаты.)Событие Ajax Success не срабатывает при вызове службы

Здесь находятся два сценария:

Этот сценарий работает:

  1. В ProcessRequest (), комментариев callExternalWebsite().
  2. Для объекта o, инициализируйте данные, чтобы имитировать результаты.
  3. Click on myButton
  4. Событие успеха срабатывает на клиенте.
  5. В Fiddler я вижу информацию заголовка. Я вижу JSon результат и т.д.

Этот сценарий не работает:

  1. В ProcessRequest(), включить призыв к callExternalWebsite().
  2. Для объекта o callExternalWebsite() вернет соответствующий объект.
  3. Click on myButton
  4. Событие успеха не пожары на клиенте.
  5. В Fiddler я вижу информацию заголовка. Я вижу результат Json и т. Д.
  6. Я знаю, что 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); 

} 

Любые мысли?

Спасибо.

Стив

+1

Вы уверены, что ответ HTTP 200/OK? Я считаю, что только коды состояния 2xx считаются «Успехом» –

+0

. Можете ли вы опубликовать код в «AjaxSucceeded»? Может быть, там проблема. Попробуйте изменить вызов успеха на «alert (« hello! »)» Или аналогично подтверждать, что ветка успеха не выполняется. –

+0

Я изменил успех на: '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

ответ

0

Что произойдет, если вы сделаете это, сообщ против msg.d:

$(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.d); 
      }, 
      error: AjaxFailed 
     }); 
    }); 
}); 
Смежные вопросы