У меня есть метод .Ajax, который вызывает метод на странице позади (выполняет некоторую логику, затем вызывает службу WCF, а затем возвращает объект), которая выглядит так:. Метод Ajax работает на локальной машине, но не на сервере
$.ajax({
type: 'POST',
url: 'MyPage.aspx/TestMethod',
dataType: "json",
contentType: "application/json",
data: "{'Id': '" + Id + "'}",
success: function (data) {
$("#randomElement").html(data.d.Foo);
},
error: function ((xhr, textStatus, error){
alert(xhr.statusText);
alert(textStatus);
alert(error);
});
И страница за:
[System.Web.Services.WebMethod]
public static MyObject TestMethod(string Id)
{
//Logic removed for readability!
return MyService.GetStuff(Id);
}
Это отлично работает на моем локальном компьютере, но не работает, когда я раскрываю к серверу.
Я определил, что метод, стоящий за страницей, не вызван (т. Е. Ошибка вызывает вызов TestMethod(), а не вызов TestMethod()).
Я также поставил предупреждение перед методом .ajax, чтобы показать мне путь к странице, на которой я нахожусь, на всякий случай, когда он делал что-то смешное с uri на реальном сервере, и он возвращается как «/ MyPage .aspx ", как я и ожидал.
Я также изменил «url:» на полный uri, чтобы увидеть, помогло ли это, и это не так.
После запуска скрипача с пользовательскими ошибками выключен, я получаю следующее сообщение об ошибке:
{"Message":"Thread was being aborted.","StackTrace":" at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)\r\n at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)\r\n at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary
2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary
2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.Threading.ThreadAbortException"}
Должен ли url быть 'MyPage.asmx/TestMethod' вместо' MyPage.aspx/TestMethod'? –
Какой ответ вы получаете от запроса ajax, когда он терпит неудачу на сервере? Он возвращает 200, 404, 500, что-то еще? – kendaleiv
@JohnPick Нет, вызов заключается в веб-странице aspx позади, а не в веб-службе asmx. – Ben