Я создал файл HTML foo.html
со следующим содержимым:
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script>
$.ajax({url:"http://foo.com/mdata",
error: function (results) {
alert("fail");
},
success: function (result) {
alert("sucesses");
}
});
</script>
Когда я загружаю этот HTML файл в веб-браузер, он всегда показывает диалоговое окно с ошибкой.
- Любая идея, почему это происходит?
- И что является лучшим способом отладить это?
PS:
Предположим, что http://foo.com/mdata
- допустимый путь веб-службы.
ИЗМЕНИТЬ № 1
Решение
аналогичный код отлично работал со мной, используя $.getJson http://jsfiddle.net/dpant/EK3W8/
Я также сохранил содержимое как .html файл и запрос из файла://к веб-службе также работает.
<!DOCTYPE html>
<html>
<head>
<style>img{ height: 100px; float: left; }</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="images">
</div>
<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
{
tags: "mount rainier",
tagmode: "any",
format: "json"
},
function(data) {
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});</script>
</body>
</html>
Похоже, что большинство браузеров поддерживает CROS, поэтому вы можете написать script сохранить его как .html и открыть его в браузере, и он будет успешно выполнять запрос Ajax * при условии, что сервер, который вы запрашиваете, поддерживает его *, В этом случае мой веб-сервер (служба) не поддерживает CROS (и конфигурация по умолчанию Apache не поддерживает его).
Многие из веб-служб включили CROS, например http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=? поэтому запрос проходит успешно.
Несколько ссылок:
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS