У меня есть следующий АЯКС метод в моем Sitecore проектаIssue возвращает строку из WebMethod в Sitecore
$.ajax({
type: 'POST',
url: '/layouts/WebMethods.aspx/SaveSubscription',
data: { hello: 'TestData' },
cache: false,
success: function (data) {
console.log(data);
$('#newsletter-signup section.form').fadeOut(0);
$('#newsletter-signup section.thankyou').fadeIn();
},
error: function (request, error) {
alert(error);
alert("Request: " + JSON.stringify(request));
}
});
Когда моя кнопка отправки нажата она стреляет выше, в свою очередь, вызывает следующий WebMethod:
[WebMethod]
public static string SaveSubscription(string hello)
{
return "hello";
}
однако, когда вызов возвращается и данные журналов в консоли я вижу следующее:
!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
</title></head>
<body>
<form method="post" action="/layouts/WebMethods.aspx/SaveSubscription" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjkPFgIeE1ZhbGlkYXRlUmVxdWVzdE1vZGUCAWRkhKZL+kK5CfzPtpuWvMk8nCH9ZzR7QgL8q7X8hM86IDw=" />
</div>
<div>
</div>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="4D781013" />
</div></form>
<!-- Visual Studio Browser Link -->
<script type="application/json" id="__browserLink_initializationData">
{"appName":"Firefox","requestId":"6592f28a894c4e99864e5a04ca41358a"}
</script>
<script type="text/javascript" src="http://localhost:56165/0b7f5b34dc2e4e69a24b14da69a7adb9/browserLink" async="async"></script>
<!-- End Browser Link -->
</body>
</html>
реалистично я ожидал бы увидеть слово «привет», однако я получил выше.
К сожалению, я не могу отлаживать этот вызов из-за того, что он является проектом sitecore, а также с ПК, который у меня очень медленный/пограничный дерьмо, и попытка присоединить процесс в Visual Studio занимает около 45 минут для запуска проекта, и даже тогда его удар и промах.
Теперь я не уверен, что кто-нибудь может мне помочь, но я подумал, что я сделаю это.
Заранее спасибо.
Update
Я изменил мой метод Аякса выглядеть следующим образом:
$.ajax({
type: 'POST',
url: '/layouts/WebMethods.aspx/SaveSubscription',
data: { hello: 'testData'},
cache: false,
dataType: "json", // New
contentType: "application/json; charset=utf-8", // New
success: function (data) {
alert('In Success');
alert(data);
$('#newsletter-signup section.form').fadeOut(0);
$('#newsletter-signup section.thankyou').fadeIn();
},
error: function (request, error) {
alert(error);
alert("Request: " + JSON.stringify(request));
}
});
Теперь поражает метод ошибок и предупреждений:
Request: {"readyState":4,"responseText":"{\"Message\":\"Invalid JSON primitive: subscribe.\",\"StackTrace\":\" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\\r\\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\\r\\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\\r\\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\\r\\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\\r\\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)\",\"ExceptionType\":\"System.ArgumentException\"}","responseJSON":{"Message":"Invalid JSON primitive: subscribe.","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"},"status":500,"statusText":"Internal Server Error"}
Я очень новый для Sitecore поэтому шаги вы упомянули, я должен следовать одному из них только, чтобы получить простую Ajax запросить работу? –