Я пытаюсь вызвать свою веб-службу (WCF Restful) из другого домена (в следующем коде они оба находятся в localhost, но с другим номером порта, который я предполагаю рассматривать как междоменный запрос), используя приведенный ниже JavaScript.
jQuery.support.cors = true;
$(document).ready(function () {
{
$.ajax({
type: "POST",
url: "http://localhost:52032/Service1.svc/std",
contentType: "application/jsonp; charset=utf-8",
dataType: "jsonp",
processData: false , //Same result if i remove this line
crossDomain : true , //Same result if i remove this line
converters: window.String, //Same result if i remove this line
success: OnSuccess,
error: OnError});
}
});
function OnSuccess(data)
{
alert("Finaly :D");
JSON.stringify(data);
}
function OnError(request, status, error)
{
alert("Error: "+request.statusText + JSON.stringify(request)+ " | " +JSON.stringify(status) +" | " +JSON.stringify(error));
}
Мой веб-сервис довольно прост. getStudents()
возвращает строку JSON. Я использовал JavaScriptSerializer
для анализа моего студенческого объекта в JSON.
namespace MyFirstWcfTestService
{
[ServiceContract]
public interface IService1
{
[OperationContract(Name = "AddParameter")]
[WebGet(UriTemplate = "/std", ResponseFormat = WebMessageFormat.Json)]
String getStudents();
}
}
Я всегда получаю следующую ошибку из функции OnError
, и когда я смотрю на ответ в режиме разработки / отладки Chrome, я вижу свой текст JSON.
Ошибка:
Успех { "readyState": 4, "статус": 200, "его статус": "успех"} | "ParserError" |
«jQuery1706816276672761887_1322704382563 не был вызван»
Мой возвращенный текст в формате json выглядит следующим образом:
"[{\" StudentID \ ": 256, \" StudentFirstName \ ": \" Али \ "\ "StudentSurname \": \ "Смит \"}, {\ "StudentID \": 306, \" StudentFirstName \ ": \" Джон \», \ "StudentSurname \": \ "Menz \"}, {\ "StudentID \": 314, \ "StudentFirstName \": \ "Джордж \", \ "StudentSurname \": \ "Луч \"}, {\ "StudentID \": 316, \ "StudentFirstName \": \ "Фред \", \ "StudentSurname \": \ "Patric \"}, {\ "StudentID \": 603, \ "StudentFirstName \": \ "Джордж \", \ "StudentSurname \": \ "Foster \"}, {\ "StudentID \": 604, \ "StudentFirstName \": \ "Bobbie \", \ "StudentSurname \ ": \" Колман \ "}, {\" StudentID \ ": 765, \" StudentFirstName \ ": \" Джим \», \ "StudentSurname \": \ "Хас \"}, {\ "StudentID \": 987, \ "StudentFirstName \": \ "Гарри \", \ "StudentSurname \": \ "потер \"}, {\ "StudentID \": 988, \ "StudentFirstName \": \ "Con \", \» StudentSurname \ ": \" Mench \ "}, {\" StudentID \ ": 1001 \" StudentFirstName \ ": \" Джим \ "\ "StudentSurname \": \ "Colon \"}]"
Не могли бы вы помочь мне найти решение этой проблемы. Я уже изменил свой веб-сервис с SOAP на этот спокойный.
EDIT
Мне удалось обернуть мое сообщение jsonp в метод (myCallback следующим образом
myCallback ([{ "StudentID": 256, "StudentFirstName": "Рэйчел", "StudentSurname": "Смит"}, { "StudentID": 306, "StudentFirstName": "Али", "StudentSurname":» Флемминг "}, {" StudentID ": 314," StudentFirstName ":" Джордж», "StudentSurname": "Луч"}, { "StudentID": 316, "StudentFirstName": "Фред", "StudentSurname": "Патрик" }, { "StudentID": 603, "StudentFirstName": "Джордж", "StudentSurname": "Фостер"}, { "StudentID": 604, "StudentFirstName": "Бобби", "StudentSurname": "Колман"}, { "StudentID": 765, "StudentFirstName": "Джим", "StudentSurname": "Хас"}, { "StudentID": 987, "StudentFirstName": "Гарри", "StudentSurname": "Потер"}, {» StudentID ": 988," StudentFirstName ":" Con», "StudentSurname": "Mench"}, { "StudentID": 1001, "StudentFirstName": "Джим", "StudentSurname": "двоеточие"}]);
И я также меняю свой Ajax-вызов следующим образом
$.ajax({
type: "post",
url: "http://localhost:52032/Service1.svc/getStd?callback=myCallback", //or callback=?
dataType: "jsonp",
//converters: jQuery.parseJSON,
contentType: 'application/javascript',
success: OnSuccess,
error: OnError
});
Но я все еще получаю ту же ошибку. Я за 3 недели мучаюсь за такую простую задачу :(