2015-12-21 3 views
0

У меня есть следующий АЯКС метод в моем 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"} 

ответ

0

Зависит, если вам нужно для доступа к Sitecore. Контекст или нет, есть два варианта, которые имеют в виду:

  • Webservice (нет доступа к Sitecore.Context)

    • Создать новую папку в папке/веб-сайта и назовите его WebServices
    • В IgnoreUrlPrefixes установки добавьте "/ WebServices" путь
    • Создать новый класс вебсервис и тестировать Ajax скрипт снова
  • Sitecore элемент Web API (доступ к Sitecore.Context)

+0

Я очень новый для Sitecore поэтому шаги вы упомянули, я должен следовать одному из них только, чтобы получить простую Ajax запросить работу? –

0
$.ajax({ 
    type: 'POST', 
    url: '/layouts/WebMethods.aspx/SaveSubscription', 
    data: { hello: 'TestData' }, 
    cache: false, 
    success: function (data) { 
     console.log(data.d); 

     $('#newsletter-signup section.form').fadeOut(0); 
     $('#newsletter-signup section.thankyou').fadeIn(); 
    }, 
    error: function (xhr) { 
     alert(xhr.responseText); 

    } 
}); 
+0

Пожалуйста, обратитесь к дополнительной информации. Только код и «попробуйте» ответы [обескуражены] (// meta.stackexchange.com/questions/196187), потому что они не содержат содержимого, доступного для поиска, и не объясняют, почему кто-то должен «попробовать это». Мы прилагаем усилия, чтобы стать источником знаний. – Mogsdad

Смежные вопросы