2012-04-27 2 views
0

У меня есть следующий скрипт, который вызывает обработчик http. Он вызывает обработчик http, а в скрипаче, я вижу, что JSON вернулась правильно, однако этот скрипт всегда попадает в блок ошибок. Как я могу определить, что не так?

<script type="text/javascript"> 
     function GetConfig() { 
      $.getJSON("http://localhost:27249/Handlers/GetServiceMenuConfiguration.ashx", function(d) { 
       alert("success"); 
      }).success(function(d) { 
       alert("success"); 
      }).error(function(d) { 
       alert("error"); 
      }).complete(function(d) { 
       alert("complete"); 
      }); 
     } 
    </script> 
+0

Не могли бы вы предоставить нам сообщение назад? и является ли сообщение верным JSON? Заголовки из post post ect, было бы неплохо. –

+0

использовать JSONLint и проверить, если возвращен JSON хорошо сформирован – fcalderan

+1

Ваш обработчик ошибок получает три аргумента, два из которых полезны для выяснения того, что такое ошибка. Что они показывают? –

ответ

4

Я вижу, что вы в том числе имя сервера (localhost) и порт (27249). Запросы Ajax контролируются Same Origin Policy, который запрещает запросы на перекрестный поиск в обычном случае. (Если вы не выполняете перекрестный вызов, вам не нужно включать часть вашего URL-адреса http://localhost:27249, что заставляет меня думать, что вы можете это сделать.)

Вы можете сделать кросс-начало если браузер поддерживает их, и если ваш код сервера правильно обрабатывает CORS. В качестве альтернативы вы можете использовать JSON-P.

+0

Я предположил, что и обработчик, и сайт, работающие на локальном хосте, будут рассматриваться как один домен - вы указываете происхождение. Я поставлю веб-страницу в том же проекте, что и обработчик. Это первый веб-разработчик, который я сделал. Когда-либо. (обычно .net dev) –

+1

@MrSuoubs: Помимо того же домена, вызовы AJAX должны быть на одном и том же порту. –

+0

Спасибо @Rocket Я нахожу, что меня много чего ловят. –

0

Встроенный JSON-анализатор JQuery довольно разборчивый, даже хорошо отформатированный JSON может иногда терпеть неудачу, если заголовки не установлены идеально. Сначала попробуйте выполнить запрос $ .ajax с свойством type: text и зарегистрировать ответ. Это будет различать проблему соединения и проблему синтаксического анализа.

$.ajax({ 
    dataType:'text', 
    url: '/Handlers/GetServiceMenuConfiguration.ashx', 
    success: function(data) { 
     console.log(data.responseText); 
    } 
}); 

Если проблема подключения, и вам необходимо запросить JSON в разных доменах, то вы можете также использовать библиотеку загрузчика, как LAB, да/Нету или Frame.js.

+1

* «Встроенный JSON-анализатор JQuery довольно разборчив, даже хорошо отформатированный JSON может иногда терпеть неудачу, если заголовки не установлены отлично» * Нет Хорошо сформированный JSON будет анализировать, если вы скажете jQuery, что это JSON. Вы делаете это одним из двух способов: 1. Верните правильный заголовок 'Content-Type'. 2. Просто скажите jQuery, что вы ожидаете возвращения JSON (через опцию 'dataType'), и в этом случае он будет игнорировать заголовок' Content-Type'. –

+0

Спасибо за ваши комментарии TJ и я уважаю ваше мнение много, но пробег может отличаться. На сервере есть множество вещей, которые можно неправильно настроить на сервере, чтобы заставить $ .getJSON не анализировать даже хорошо отформатированный JSON. Это одна из причин, почему этот же вопрос появляется снова и снова. – BishopZ

+1

@ Епископ: Можете ли вы указать мне хотя бы на одного из них? Потому что, честно говоря, я никогда не слышал ничего подобного. Я вижу ** много ** людей, спрашивающих о ошибках JSON, и они почти всегда приходят к плохо сформированному JSON, SOP или неправильно делают вызов. –