2012-02-02 2 views
7

Я создал вызов jQuery ajax, и он отлично работает в Chrome, firefox и IE.safari - jquery - ошибка внутреннего сервера ajax 500

Где, как и в Safari, он дает 500 внутренних ошибок сервера в ответе. Хотя это может быть связано с исключением из Server. Но когда я попробовал отладку, я обнаружил, что он вообще не поражает сервер.

Причудливая вещь в этом случае, ajax-вызов работает для каждого альтернативного вызова. Call-1 терпит неудачу, а затем вызывает 2 успешно. enter image description hereenter image description here

Am прилагается скриншот запроса и ответа (как успех, так и ошибка). Пожалуйста, помогите мне решить эту проблему.

Спасибо заранее, Raghav

var coId = globalObject.GetCompanyIdFromUrl(); 
if ($("#headerCompanyMenu").length > 0 && coId != "") { 
    var strData = "{\"coId\":\"" + coId + "\"}"; 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     cache: false, 
     url: globalObject.rootPath + "search/webmethod.aspx/GetCoHeaderData", 
     data: strData, 
     async: true, 
     success: function (d) { 
      var coHeaderData = JSON.parse(d); 
      $("#lblCoNm").html(coHeaderData.lblCoNm); 
      $("#lbl_prim_im").html(coHeaderData.lbl_prim_im); 
      $("#lbl_prim_md").html(coHeaderData.lbl_prim_md); 
      $("#lbl_prd_own").html(coHeaderData.lbl_prd_own); 
      $("#lbl_geo_own").html(coHeaderData.lbl_geo_own); 
      $("#lbl_org_inv").html(coHeaderData.lbl_org_inv); 
      $("#lbl_out_inv").html(coHeaderData.lbl_out_inv); 
      $("#lbl_cur_val").html(coHeaderData.lbl_cur_val); 
      $("#lbl_nbv").html(coHeaderData.lbl_nbv); 
      $("#lbl_fv").html(coHeaderData.lbl_fv); 
      $("#lblProc").html(coHeaderData.lblProc); 
      $("#lblFinGrd").html(coHeaderData.lblFinGrd); 

      if (coHeaderData.addNewDeal == "true") 
       $("#lnkAddNewDeal").show(); 
      if (coHeaderData.coDeals.length > 0) { 
       BindData("coDealsTmpl", coHeaderData.coDeals); 
       $("#coDeals").show(); 
      } 
     }, 
     error: function (error) { 
      //alert("Company search error"); 

     } 

    }); 

бегает сафари от Win7. Фактическое сафари Mac загружает его отлично. Нет ошибок при вызове ajax.

Сервер - это окна 2008 года, работающие на iis 7. Нет серверов балансировки нагрузки. Каждый раз, когда ajax-вызов нажимает один и тот же сервер, тот же самый метод, с теми же входными данными и ожидает одинаковые выходные данные.

+0

Вставить код вызова ajax; возможно, там есть что-то важное. Что-нибудь на сервере, о котором мы должны знать? Это локальный бокс? Балансировка нагрузки (несколько серверов с одним внутренним именем хоста, хотя ваше имя хоста не похоже на типичную схему именования для этого)? Получены ли данные, которые вы собираете, на основе чего-то, что вы игнорируете, которые могут совпадать с шансами и равенствами? Я не могу думать ни о чем другом, но больше информации было бы хорошо. –

+0

, если данные будут проблемой, тогда точка останова на сервере должна быть удалена, правильно .. Не ударить точку останова @ сервера во время ошибки. – Raghav

+0

Вы видите в окне журнала событий - просмотр событий ошибки? В вашем случае я попытаюсь удалить «и место просто» для теста.Возможно, сафари отправляет некоторые параметры, которые iis распознают их по URL-адресу как опасные, и единственное, что здесь думает, - это косая черта - если сафари не обрабатывают его одинаково. – Aristos

ответ

2

Я бы сказал, что причина отказа в вызове из-за ошибки в Safari при работе с Windows Authentication в IIS. Перейдите к настройкам проверки подлинности вашего веб-сайта. Щелкните правой кнопкой мыши на Windows Authentication, выберите поставщиков и удалите Negotiate, оставив NTLM, который работает нормально. Я не тестировал Kerberos.

Этот вопрос появляется только в некоторых сборках сафари.

2

Первое: Я хотел бы проверить, чтобы убедиться, что $ ("# headerCompanyMenu") длина> 0 & & coId = "" имеет значение истинно, когда вы думаете, что должно быть.!.

Во-вторых: Я уверен, что у вас есть «/» в конце globalObject.rootPath, когда вы используете Safari.

Третье: Я хотел бы изменить свой АЯКС пост, чтобы выглядеть следующим образом:

var coId = globalObject.GetCompanyIdFromUrl(); 
if ($("#headerCompanyMenu").length > 0 && coId != "") { 
    var strData = {'coId' : coId}; 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     cache: false, 
     url: globalObject.rootPath + "search/webmethod.aspx/GetCoHeaderData/", 
     data: strData, 
     dataType: "json", 
     async: true, 
     success: function (d) { 
      var coHeaderData = JSON.parse(d); 
      $("#lblCoNm").html(coHeaderData.lblCoNm); 
      $("#lbl_prim_im").html(coHeaderData.lbl_prim_im); 
      $("#lbl_prim_md").html(coHeaderData.lbl_prim_md); 
      $("#lbl_prd_own").html(coHeaderData.lbl_prd_own); 
      $("#lbl_geo_own").html(coHeaderData.lbl_geo_own); 
      $("#lbl_org_inv").html(coHeaderData.lbl_org_inv); 
      $("#lbl_out_inv").html(coHeaderData.lbl_out_inv); 
      $("#lbl_cur_val").html(coHeaderData.lbl_cur_val); 
      $("#lbl_nbv").html(coHeaderData.lbl_nbv); 
      $("#lbl_fv").html(coHeaderData.lbl_fv); 
      $("#lblProc").html(coHeaderData.lblProc); 
      $("#lblFinGrd").html(coHeaderData.lblFinGrd); 

      if (coHeaderData.addNewDeal == "true") 
       $("#lnkAddNewDeal").show(); 
      if (coHeaderData.coDeals.length > 0) { 
       BindData("coDealsTmpl", coHeaderData.coDeals); 
       $("#coDeals").show(); 
      } 
     }, 
     error: function (error) { 
      //alert("Company search error"); 

     } 

    }); 
+0

Спасибо за предложения. ничего не получилось. – Raghav

2

В дополнение к комментариям CCCason, я бы явно указать вызов Ajax, что это тип данных JSON, добавив:

dataType: "json" 

Возможно, сафари угадывает неправильный тип данных?

+0

Добавил это в blob ajax в моем ответе. Хорошая идея. – Jason