2016-06-21 19 views
2

の選択された行から取得したGridDataItemオブジェクトを送信しようとしています。
しかし、私は捕捉されない例外RangeErrorを取得しています:私は、コード、私の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のパラメータを文字列に渡し、オブジェクトの代わりに文字列を渡すと動作します。だから、オブジェクトに何か問題があるか、WebMethodに渡しているようです。

私は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 objectsには、GridDataItemオブジェクトを保持するGridTableViewを返すget_owner()メソッドがあり、GridTableViewには、それに含まれるオブジェクトGridDataItemを取得するメソッドがあります。そこには循環参照があります。

選択した項目の配列を調べ、アプリケーションに意味のある識別子を抽出し、に渡す必要があります。

また、あなたが書いた:

When I run the code, my AJAX success fires

ないかなりの。 successコールバックをsuccess: alert('Complete')のように設定しました。しかし、これは間違っています。このように設定する必要があります:success: function() { alert('Complete') }。関数をsuccessコールバックとして渡す必要があります。あなたが持っている方法では、alertと呼ばれ、$.ajaxがAjaxクエリーの実行を開始し、成功ハンドラとして渡されるのは戻り値です。これはundefinedです。

関連する問題