Отобразить мой возвращенный JSON

#javascript #jquery #html #json

#javascript #jquery #HTML #json

Вопрос:

На моей HTML-странице у меня есть следующий скрипт.

 var request = $.ajax({
    url: 'http://localhost:1337/testservice.svc/rest/BillingPatterns', 
    dataType: 'json',
    success: function(data){alert('test');},    
});

request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: "   textStatus );
});
  

Это возвращает «Ошибка запроса: ошибка»

Используя fiddler2 (проверяет http-трафик), я могу видеть запрос и что ответ:

 HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Thu, 03 Nov 2011 16:11:05 GMT
Content-Length: 159

{"Anniversary":false,"BillingPatternCode":6,"BillingPatternDesc":"Monthly Anniversary ","Frequency":1,"Monthly":true,"QuarterDayType":null,"QuarterDays":false}
  

введите описание изображения здесь

Но он не будет отображаться. Независимо от того, что я пробовал. Да, я пробовал alert(данные.BillingPatternDesc)

РЕДАКТИРОВАТЬ: похоже, что он не выполняет функцию «успех».

Комментарии:

1. Там у вас есть абсолютный URL-адрес. Вы пытаетесь выполнить запрос с перекрестным источником (который не будет работать)? (Удалите http://localhost:1337 , чтобы URI начинался с / , чтобы убедиться, что вы относительны).

2. Есть ответ от веб-сервиса. В любом случае, я попробую сделать это быстро. 🙂

3. Получение ответа и возможность прочитать его в JS — это две разные вещи.

4. когда я возвращаю объект, я устанавливаю его name someName ={«Anniversary»:false}, разве это не так с jQuery $ .ajax?

Ответ №1:

Предоставленный вами код выглядит правильным для меня. Я предполагаю, что проблема может быть в вашем URL. Ваш запрос JSON — это to http://localhost:1337/Myservice.svc/rest/BillingPatterns ; страница, на которой запущен ваш скрипт, также запущена localhost:1337 ? В противном случае ваш браузер не позволит вам получить JSON, поскольку он считается междоменным запросом.

Если вам действительно нужно получить ресурс JSON в другом домене / порту, вы можете вместо этого использовать JSONP.

Комментарии:

1. HTML-страница находится только в папке «Мои документы» на том же компьютере (локальный хост). Спасибо, что указали на это.

2. Тогда это не сработает; Если вы запускаете HTML-документ из file ( file://... ) и пытаетесь получить доступ http://localhost:1337 , это считается междоменным (даже перекрестным «zone») запросом. Возможно, вам придется преобразовать в JSONP.

3. Что ж, я не смог успешно заставить JSONP работать, но это определенно междоменная проблема. (Я переместил свой HTML-код на свой локальный хост, и он там работает)

Ответ №2:

Попробуйте alert(data.d) вместо alert(data).

редактировать: не думаю, что это связано, но вам не хватает точки с запятой после вашего предупреждения.

edit2: если он не выполняет функцию успеха, измените getJSON на $.ajax и отправьте обратный вызов с ошибкой, чтобы узнать, в чем проблема.

Комментарии:

1. теперь использую ajax. С точкой с запятой и без нее это не работает. Обратный вызов с ошибкой? Я использую инструмент разработки Firefox, ошибок js нет. я все же попробую. 🙂

2. пожалуйста, посмотрите мой обновленный код, он говорит об ошибке (поскольку я получаю textstatus), но как мне увидеть фактическую ошибку?

3. да, к сожалению, общий $.ajax является единственным вызовом jquery ajax, который принимает обратный вызов с ошибкой. хороший источник в net.tutsplus.com/tutorials/javascript-ajax /…

4. проверьте все 3 параметра, которые jquery передает вашей ошибке обратного вызова — error(jqXHR, textStatus, errorThrown) для получения информации о фактической ошибке.

Ответ №3:

Попробуйте использовать alert(data.toSource()); или console.log(data);

http://www.w3schools.com/jsref/jsref_toSource_date.asp

Комментарии:

1. даже это не работает:( . На самом деле это нечто подобное, что я делал в ruby, используя REST, и смог работать в обратном направлении от просмотренной структуры, чтобы получить то, что я хочу. Сбит с толку, почему он тоже не работает. Что касается журнала, если он не сохраняется в другом месте, он не отображается на странице.

2. Что произойдет, если вы просто выполните простое alert('just testing'); внутри функции getJSON обратного вызова? Возможно, функция даже не запущена…

3. Хорошо, ничего:/ Есть причины, по которым функция не выполняется? Я могу вызвать пример кода просто отлично, и я знаю, что часть вызова работает.