#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);
Комментарии:
1. даже это не работает:( . На самом деле это нечто подобное, что я делал в ruby, используя REST, и смог работать в обратном направлении от просмотренной структуры, чтобы получить то, что я хочу. Сбит с толку, почему он тоже не работает. Что касается журнала, если он не сохраняется в другом месте, он не отображается на странице.
2. Что произойдет, если вы просто выполните простое
alert('just testing');
внутри функцииgetJSON
обратного вызова? Возможно, функция даже не запущена…3. Хорошо, ничего:/ Есть причины, по которым функция не выполняется? Я могу вызвать пример кода просто отлично, и я знаю, что часть вызова работает.