Хорошо, это должен быть довольно простой вопрос, и я, вероятно, упускаю что-то очевидное.
У меня есть простой скрипт, делающий запрос к серверу:
var DTO = { 'path': path };
var url = 'default.aspx/Get';
var test;
$('#getInstance').click(function () {
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
data: JSON.stringify(DTO),
contentType: 'application/json; charset=utf-8',
success: function (msg) {
test = msg;
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
});
});
Это отлично работает, так как подключается к серверу и возвращает данные, с одной простой проблемой. Он обрабатывает этот запрос как междоменный запрос, поэтому использует jsonp.
Код сервера находится здесь:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static MyObject Get(string path)
{
MyObject foo = new MyObject();
return foo;
}
Обычно это не было бы проблемой, за исключением того, что я обращаюсь к WebMethod, и у него нет возможности возвращать ответ jsonp (это означает, что он не может прикрепить функцию обратного вызова к ответу. Теперь, если это было ручной ответ, я мог бы взломать его и прикрепить параметр, но я пользуюсь встроенной сериализацией, поэтому нет способа возиться с ответом.
Чтобы помочь уточнить. Страница размещена по адресу:
http://127.0.0.1:144/default.aspx
и запрос в firebug:
http://127.0.0.1:144/default.aspx/Get?callback=jQuery1502768168154247801_1298656485388
Позвольте мне подчеркнуть тот факт, что этот код работает. Единственная проблема заключается в том, что jQuery рассматривает этот запрос как междоменный. Но почему?
ОБНОВЛЕНИЕ: Ну, после еще многих часов и большего количества испытаний я сузил эту проблему до того, чтобы она была ошибкой в jquery 1.5.1. Я провел некоторое тестирование со старыми версиями (все версии 1.4), и у меня не было проблем, запрос был сделан с использованием JSON, и ответ был получен успешно. Что они могли сделать, чтобы этот запрос считался CORS?