2016-06-21 2 views
2

의 선택한 행에서 검색 한 GridDataItem 개체를 보내려고합니다.
하지만 떴어 catch되지 않은 오류 RangeError :이 AJAX 호출을 할 때 최대 호출 스택의 크기는 오류를 초과 :오류 : "최대 호출 스택 크기 초과"AJAX 호출 웹 메서드

편집 : 나는 코드, 내 AJAX 성공 화재,하지만 난이 중단 점을 실행하면 WebMethod에서 절대 안타. 이 후 페이지가 잠시 멈추고 위에서 언급 한 오류가 발생합니다.

jQuery를

$(document).ready(function() { 
    $('#<%=btnTransferIn.ClientID%>').on('click', function() { 
     var grid = $find("<%= gridStudents.ClientID %>"); //Returns an Object 
     var gridSelItems = grid.get_selectedItems(); //Returns Array 
     //var selectedItem = gridSelItems[0]; //Returns an Object 

     AjaxTransfer(gridSelItems); 
    }); 
}); 

function AjaxTransfer(selectedItem) { 
    $.ajax({ 
     type: "POST", 
     url: "GradeSheet2.aspx/btnTransferIn_Click", 
     data: { 'gsi': selectedItem }, 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: alert('Complete') 
    }) 
} 

C#을

[System.Web.Services.WebMethod] 
public static string btnTransferIn_Click(GridDataItem gsi) 
{ 
    return "Done"; 
} 

의 Web.config

<?xml version="1.0"?> 
    <configuration> 

     <configSections> 
     </configSections> 

     <appSettings> 
      <add key="AISAnalogPATH" value="\\tms-sse-01\tms_share\cbtExecutables\" /> 
      <add key="ExternalCAIPath" value="\\tms-sse-01\tms_share\cbtExecutables\" /> 
      <add key="AISDigitalPath" value="\\tms-sse-01\tms_share\cbtExecutables\" /> 
      <add key="AuthorwarePath" value="\\tms-sse-01\tms_share\cbtExecutables\" /> 
      <add key="QuestionMarkPath" value="\\tms-sse-01\tms_share\cbtExecutables\" /> 
      <add key="WelcomeMessage" value="Welcome to the TMS 2016 Program"/> 
      <add key="Location" value="STL"/> 
      <add key="TMSPagesConnectionString" value="server=tms-sse-01;User ID=xcv;Password=mumumu777;Initial Catalog=qwer12344567;"/> 
      <add key="TMSConnectionString" value="server=tms-sse-01;User ID=xcv;Password=mumumu777;Initial Catalog=qwer12344567;"/> 
      <add key="LogPath" value="e:\TMS\TMS_Log\"/> 
      <add key="cbtPath" value="E:\C17CBT\"/> 
      <add key="xmlPath" value="E:\TMS_XML\"/> 
      <add key="TMSVersionId" value="2.0"/> 

      <add key="PageHeight" value="750px"/> 
      <add key="Telerik.ScriptManager.TelerikCdn" value="Disabled"/> 
      <add key="Telerik.StyleSheetManager.TelerikCdn" value="Disabled"/> 
     </appSettings> 

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <handlers>  
     <remove name="ChartImage_axd"/> 
     <remove name="Telerik_Web_UI_SpellCheckHandler_axd"/> 
     <remove name="Telerik_Web_UI_DialogHandler_aspx"/> 
     <remove name="Telerik_RadUploadProgressHandler_ashx"/> 
     <remove name="Telerik_Web_UI_WebResource_axd"/> 
     <add name="Telerik_Web_UI_DialogHandler_aspx" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" preCondition="integratedMode"/> 
     <add name="Telerik_Web_UI_SpellCheckHandler_axd" path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" preCondition="integratedMode"/> 
     <add name="Telerik_Web_UI_WebResource_axd" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" preCondition="integratedMode"/> 
     <add name="ChartImage_axd" path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" preCondition="integratedMode"/> 
     <add name="Telerik_RadUploadProgressHandler_ashx" path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" preCondition="integratedMode"/> 
    </handlers> 
</system.webServer> 

<system.web> 
    <customErrors mode="Off"/> 
    <httpHandlers> 
     <add path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" validate="false"/> 
     <add path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" validate="false"/> 
     <add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false"/> 
     <add path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" validate="false"/> 
     <add path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" validate="false"/> 
    </httpHandlers> 
    <compilation debug="true" targetFramework="4.5"> 
     <assemblies> 
      <add assembly="Microsoft.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> 
      <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> 
      <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     </assemblies> 
    </compilation> 
    <httpRuntime targetFramework="4.5"/> 
     <authentication mode="Windows"/> 
     <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"> 
      <controls> 
       <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit"/> 
       <add tagPrefix="telerik" namespace="Telerik.Web.UI" assembly="Telerik.Web.UI"/> 
       <add tagPrefix="TMSWeb" tagName="PersonList" src="~/TMS/Controls/PersonList.ascx"/> 
       <add tagPrefix="TMSWeb" tagName="DateTemplate" src="~/TMS/Controls/DateTemplate.ascx"/> 
      </controls> 
     </pages> 
    </system.web> 

    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral"/> 
      <bindingRedirect oldVersion="0.0.0.0-2.1.0.4" newVersion="2.1.0.4"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 

</configuration> 

나는 WebMet을 변경하면 내가 발견 hod의 매개 변수를 문자열로 변환하고 객체 대신 문자열을 전달하면 작동합니다. 그래서 객체 나 웹 메쏘드로 전달하는 방식에 문제가있는 것처럼 보입니다.

내가 AJAX 호출을하기 전에 콘솔에서 객체를 검사했는데 문제가 없다고 생각합니다.하지만 모든 것을 잘 이해하지 못했습니다.

enter image description here

내가 너무 중요한 아무것도 탈락하지 않은 바랍니다. 더 많은 정보가 필요하면 알려주십시오.

미리 감사드립니다.

+0

일부 코드를 게시하십시오. – Rex

+0

JS를 파일에서 분리 하시겠습니까? 아니면 스크립트 태그입니까? 일부 코드를 게시하면 더 많은 것을 이해하는 데 도움이 될 것입니다 ... – Rex

+0

아무런 차이가 없어야하지만 스크립트 태그에 있습니다. – CrazyPaste

답변

2

게시 한 스크린 샷으로 판단하면 복잡한 구조 인 $.ajax으로 전달됩니다. $.ajax은이 구조를 JSON에 직렬화하려고 시도 할 것이고, 이것은 일이 실패하기 시작할 곳입니다. 순환 참조가있는 구조체를 전달하려고하면 $.ajax이 생성하는 오류가 발생합니다.는 예를 들어, 이것은 Uncaught RangeError: Maximum call stack size exceeded 오류가 발생합니다

var a = {}; 
a.foo = a; 
$.ajax("/", { data: a, dataType: "json"}); 

내가 Telerik에 익숙하지 않아요을하지만 get_selectedItems에 대한 문서는 GridDataItem 객체를 반환 언급하고있다. These objectsGridDataItem 개체를 보유하는 GridTableView을 반환하는 get_owner() 메서드를 가지고 있으며 GridTableView은 차례로 개체에 포함 된 GridDataItem 개체를 가져 오는 메서드를 가지고 있습니다. 바로 거기에 순환 참조입니다.

선택한 항목의 배열을 살펴보고 응용 프로그램에 의미있는 식별자를 추출한 다음 을 ajax 호출에 전달해야합니다.

또한, 썼다 :

When I run the code, my AJAX success fires

하지 꽤 있습니다. success 콜백을 success: alert('Complete')과 같이 설정했습니다.그러나 이것은 올바르지 않습니다. 다음과 같이 설정해야합니다 : success: function() { alert('Complete') }. 함수를 success 콜백으로 전달해야합니다. 가지고있는 방식대로 alert이고$.ajax은 Ajax 쿼리를 수행하기 시작하며 성공 처리기로 전달되는 값은 의 반환 값인 alert('Complete')입니다.

관련 문제