jquery
  • asp.net-mvc
  • json
  • 2013-03-14 5 views 8 likes 
    8

    データをデータベースに完全に入力しても何らかの形でエラー関数を呼び出すこのjqueryポストコールがあります。JSONポストエラー関数

    <script type="text/javascript"> 
        $(document).ready(function() { 
         $("#ExtMailCreate").click(function() { 
          var url = '@Url.Action("Create")'; 
          var data = JSON.stringify(SaveExternalMail()); 
          $.ajax({ 
           type: "POST", 
           url: url, 
           data: data, 
           dataType: "json", 
           contentType: "application/json; charset=utf-8", 
           success: function (data) { 
            $("#result").append("pass"); 
           }, 
           error: function (data) { 
            $("#result").append("error"); 
           } 
          }); 
         }); 
        }); 
    
        function SaveExternalMail() { 
         var costcentrecode = $("#CostCentreCode").val(); 
         var day = $("#ExtMailDatePicker").val(); 
         var externalMailItemID = $("#ExternalMailItemID").val(); 
         var externalMailLocationID = $("#ExternalMailLocationID").val(); 
         var quantity = $("#Quantity").val(); 
         return { 
          CostCentreCode: costcentrecode, 
          Day: day, 
          ExternalMailItemID: externalMailItemID, 
          ExternalMailLocationID: externalMailLocationID, 
          Quantity: quantity 
         }; 
        } 
    </script> 
    

    - コントローラ

    <HttpPost()> _ 
        Function Create(ByVal collection As ExternalMail) As JsonResult 
         Try 
          If ModelState.IsValid Then 
           _repositoryForExternalMail.Save(collection, "") 
          End If 
    
          Return Json(New ExternalMail With {.CostCentreCode = collection.CostCentreCode, .Day = collection.Day, .Quantity = collection.Quantity}, JsonRequestBehavior.AllowGet) 
    
         Catch ex As Exception 
          Return Json("An Error Occurred") 
         End Try 
        End Function 
    

    ---- UPDATE ---

    Google Chromeは、次のエラーを報告している:

    POST localhost/Mail/ExternalMail/Create 403 (Forbidden)
    jquery.min.js:4 send jquery.min.js:4 f.extend.ajax
    jquery.min.js:4 (anonymous function) Create:59 f.event.dispatch
    jquery.min.js:3 h.handle.i

    - ページのソース

    <!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="utf-8" /> 
    <title>Create</title> 
    <link href="/Mail/Content/Site.css" rel="stylesheet" type="text/css" /> 
    <link rel="stylesheet" type="text/css" href="/Mail/Scripts/jqModal.css" /> 
    <link href="http://cdn.kendostatic.com/2012.2.913/styles/kendo.common.min.css" rel="stylesheet" type="text/css" /> 
    <link href="http://cdn.kendostatic.com/2012.2.913/styles/kendo.dataviz.min.css" rel="stylesheet" type="text/css" /> 
    <link href="http://cdn.kendostatic.com/2012.2.913/styles/kendo.blueopal.min.css" rel="stylesheet" type="text/css" /> 
    
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"> </script> 
    <script src="/Mail/Scripts/json2min.js" type="text/javascript"></script> 
    <script src="/Mail/Scripts/jquery.JSONP.min.js" type="text/javascript"></script> 
    <script src="/Mail/Scripts/jquery.validate.min.js" type="text/javascript"></script> 
    <script src="/Mail/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript">   </script> 
    
    <script src="http://cdn.kendostatic.com/2012.2.913/js/kendo.all.min.js" type="text/javascript"></script> 
    <script src="http://cdn.kendostatic.com/2012.2.913/js/kendo.aspnetmvc.min.js" type="text/javascript"></script> 
    <script src="/Mail/Scripts/modernizr-1.7.min.js" type="text/javascript"></script> 
    <script type="text/javascript" src="/Mail/Scripts/jqModal.js"></script> 
    
    </head> 
    <body> 
    <div class="page"> 
        <header> 
        <div id="pageheader"> 
         <div id="pageheader_left"> 
          <img id="TitleBanner" src=/Mail/Content/Images/titlebanner.jpg alt="TitleBanner"/> 
         </div> 
         <div id="pageheader_center"> 
    
         </div> 
         <div id="pageheader_right"> 
         <a href="/Mail/" title="Click to go to Home Page"><img id="HomeImage" src=/Mail/Content/Images/home.gif alt="Home"/></a> 
         <a href="/Mail/Account/About"><img id="AboutImage" src=/Mail/Content/Images/about.gif alt="About"/></a> 
          <a href="/Mail/Account/Logoff"><img id="ExitImage" src=/Mail/Content/Images/logoff.gif alt="Exit"/></a> 
         </div>  
         <div id="pageheader_lower"> 
         </div>  
        </div> 
    
    
        <ul class="k-widget k-reset k-header k-menu" id="Menu"><li class="k-item k-state-default"> 
    <a class="k-link" href="/Mail/">Home</a></li><li class="k-item k-state-default"><span class="k-link">Manage<span class="k-icon k-i-arrow-s"></span></span><ul class="k-group"><li class="k-item k-state-default"><span class="k-link">External Mail<span class="k-icon k-i-arrow-e"></span></span><ul class="k-group"><li class="k-item k-state-default"><a class="k-link" href="/Mail/ExternalMail">External Mail</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/ExternalMailCategory">External Mail Category</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/ExternalMailItem">External Mail Item</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/ExternalMailCost">External Mail Cost</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/ExternalMailLocation">External Mail Location</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/ExternalMailInvoice">External Mail Invoice</a></li></ul></li><li class="k-item k-state-default"><span class="k-link">Internal Mail<span class="k-icon k-i-arrow-e"></span></span><ul class="k-group"><li class="k-item k-state-default"><a class="k-link" href="/Mail/InternalMail">Internal Mail</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/InternalMailCategory">Internal Mail Category</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/InternalMailItem">Internal Mail Item</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/InternalMailCost">Internal Mail Cost</a></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/InternalMailLocation">Internal Mail Location</a></li></ul></li><li class="k-item k-state-default"><a class="k-link" href="/Mail/CostCentre">Cost Centre</a></li></ul></li><li class="k-item k-state-default"><span class="k-link">Reports</span></li></ul><script> 
    jQuery(function(){jQuery("#Menu").kendoMenu({});}); 
    </script>    
        </header> 
        <section id="main"> 
    
    <div class="jqmWindow" id="dialog"> 
        <a href="#" class="jqmClose">Close</a> 
    </div> 
    
    
    <script type="text/javascript"> 
    
    $(document).ready(function() { 
    
        var exturl = '/Mail/ExternalMail/Create'; 
        $("#ExtMailCreate").click(function() { 
    
    
         var dataJSON = JSON.stringify(SaveExternalMail()); 
    
         $.ajax({ 
            cache: false, 
             type: "POST", 
             url: exturl, 
             data: dataJSON, 
             contentType: 'application/json; charset=utf-8', 
             success: function (data) { 
              showMessage("test", "information"); 
             }, 
             error: function (xhr, textStatus, errorThrown) { 
              showMessage("An error occurred while adding this record.   Please try again later.", "error"); 
             } 
    
    
            }); 
    
        }); 
    
    }); 
    
    function showMessage(message, messageType) { 
        $().ready(function() { 
         $('#dialog').jqm(); 
    
         switch (messageType) { 
          case 'information': 
           $('#dialog').removeClass("errorMessage"); 
           $('#dialog').addClass("informationMessage"); 
           break; 
          case 'error': 
           $('#dialog').removeClass("informationMessage"); 
           $('#dialog').addClass("errorMessage"); 
           break; 
          default: 
           break; 
         } 
    
         $('#dialog').html("<a href=\"#\" class=\"jqmClose\">Close</a><br />" + message); 
         $('#dialog').jqmShow(); 
        }); 
    } 
    
    
        function SaveExternalMail() { 
         var costcentrecode = $("#CostCentreCode").val(); 
         var day = $("#ExtMailDatePicker").val(); 
         var externalMailItemID = $("#ExternalMailItemID").val(); 
         var externalMailLocationID = $("#ExternalMailLocationID").val(); 
         var quantity = $("#Quantity").val(); 
    
         return { CostCentreCode: costcentrecode, Day: day, ExternalMailItemID:  externalMailItemID, ExternalMailLocationID: externalMailLocationID, Quantity: quantity }; 
        } 
    
    </script> 
    <form action="/Mail/ExternalMail/Create" method="post"> <fieldset> 
        <legend>ExternalMail</legend> 
        <div class="editor-label"> 
         <label for="ExternalMailLocationID">Please select a Location</label> 
        </div> 
        <div class="editor-field"> 
         <select data-val="true" data-val-number="The field ExternalMailLocationID must be a number." data-val-required="The ExternalMailLocationID field is required." id="ExternalMailLocationID" name="ExternalMailLocationID"> 
    <option value="2">Sydney</option> 
    </select> 
         <span class="field-validation-valid" data-valmsg-for="ExternalMailLocationID" data-valmsg-replace="true"></span> 
        </div> 
        <div class="editor-label"> 
         <label for="CostCentreCode">Please select a CostCentre</label> 
        </div> 
        <div class="editor-field"> 
         <select id="CostCentreCode" name="CostCentreCode" size="15"><option value="Test000">Test</option> 
         </select> 
         <span class="field-validation-valid" data-valmsg-for="CostCentreCode" data-valmsg-replace="true"></span> 
        </div> 
         <div class="editor-label"> 
          <label for="ExternalMailItemID">Please select a Mail Item Type</label> 
         </div> 
         <div class="editor-field"> 
          <select data-val="true" data-val-number="The field ExternalMailItemID must be a number." data-val-required="The ExternalMailItemID field is required." id="ExternalMailItemID" name="ExternalMailItemID"><option value="4">Test10</option> 
         </select> 
         <span class="field-validation-valid" data-valmsg-for="ExternalMailItemID" data-valmsg-replace="true"></span> 
        </div> 
        <div class="editor-label"> 
         <label for="Day">Please select a Date</label> 
        </div> 
        <div class="editor-field"> 
         <input class="k-input" id="ExtMailDatePicker" name="ExtMailDatePicker" type="date" value="19/03/2013" /><script> 
        jQuery(function(){jQuery("#ExtMailDatePicker").kendoDatePicker({"format":"d/MM/yyyy","min":new Date(1900,0,1,0,0,0,0),"max":new Date(2099,11,31,0,0,0,0)});}); 
         </script> 
         <span class="field-validation-valid" data-valmsg-for="Day" data-valmsg-replace="true"></span> 
        </div> 
        <div class="editor-label"> 
         <label for="Quantity">Please enter the no of Mails</label> 
        </div> 
        <div class="editor-field"> 
         <input class="text-box single-line" data-val="true" data-val-number="The field Quantity must be a number." data-val-required="The Quantity field is required." id="Quantity" name="Quantity" type="text" value="" /> 
         <span class="field-validation-valid" data-valmsg-for="Quantity" data-valmsg-replace="true"></span> 
        </div> 
        <p> 
         <input type="button" value="Create" id="ExtMailCreate" /> 
        </p> 
    </fieldset> 
    </form><div> 
    <a href="/Mail/ExternalMail">Back to List</a> 
    </div> 
         <div id="result"> 
    </div> 
    
        </section> 
        <footer> 
    
        </footer> 
    </div> 
    </body> 
    </html> 
    

    - AjaxのリクエストRespone

    Request URL:http://localhost/Mail/ExternalMail/Create 
    Request Method:POST 
    Status Code:403 Forbidden 
    Request Headersview source 
    Accept:*/* 
    Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
    Accept-Encoding:gzip,deflate,sdch 
    Accept-Language:en-GB,en-US;q=0.8,en;q=0.6 
    Authorization:Negotiate TlRMTVNTUAADAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAABcKIogUBKAoAAAAP 
    Connection:keep-alive 
    Content-Length:113 
    Content-Type:application/json; charset=UTF-8 
    Cookie:ASP.NET_SessionId=tg1xrabaigumj3fxooa1satc 
    DNT:1 
    Host:localhost 
    Origin:http://localhost 
    Referer:http://localhost/Mail/externalmail/Create 
    User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko)  Chrome/25.0.1364.172 Safari/537.22 
    X-Requested-With:XMLHttpRequest 
    Request Payload 
    {"CostCentreCode":"B125","Day":"20/03/2013","ExternalMailItemID":"4","ExternalMailLocationID":"1","Quantity":"2"} 
    Response Headersview source 
    Cache-Control:private, s-maxage=0 
    Content-Length:127 
    Content-Type:application/json; charset=utf-8 
    Date:Wed, 20 Mar 2013 01:31:21 GMT 
    Server:Microsoft-IIS/5.1 
    X-AspNet-Version:4.0.30319 
    X-AspNetMvc-Version:3.0 
    X-Powered-By:ASP.NET 
    
    +0

    Return Json( "エラーが発生しました")にブレークポイントを設定した場合、どうなりますか?ヒットしましたか? –

    +0

    いいえ、ヒットしません。 – Baahubali

    +0

    あなたはCreateメソッドにヒットしましたか? –

    答えて

    2

    私は問題がJsonRequestBehavior.AllowGet

    を指定して、方法に投稿されたと思う:

    $.ajax({ 
        type: "POST", 
        url: url, 
    

    データベースは人口なっている場合は、私たちが知っていますリポジトリコードが起動しています。ブラウザはHTTP403を報告しています.HTTP403は、フレームワークがセキュリティ例外をスローするような匂いがしています.GETに応答すると予想され、POSTを受信する場合に起こります。

    +0

    私はJsonRequestBehavior.AllowGetを削除しようとしましたが、エラースローは同じです。 – Baahubali

    0

    データ型がjsonですが、応答をjsonとして解析できない場合、ajaxリクエストはエラーブロックに入ります。

    クロムを開き、エラーブロックにブレークポイントを置き、データの値を確認します。内容をjsonバリデーターに置き、あなたの応答が有効なjsonであることを確認してください。

    も、あなたはのparamsを検査し、より明確に何が起こっているか見ることができ、それらのつくにブレークポイントを置く

    success: function(data, txtStatus, jqxhr){ // code here } 
    error: function(jqxhr, txtStatus, errorThrown) { // code here } 
    

    にあなたの成功とエラー関数のメソッドSIGSを変更します。

    - 更新 あなたは403エラーコードを取得しているので、またあなたのため、このを見てみStackOverflowの上でこの答えを見て

    403 forbidden after publishing asp.net MVC

    にあなたが指しているフォルダのアクセス許可を確認します5.1をIISで実行されている、

    Running MVC2 Application on IIS 5.2

    +0

    は、上記のすべての手順を完了した後も同じ問題を報告します。 – Baahubali

    0

    はアクチにするJsonResultからあなたのコントローラであなたの方法を変更してみてください似かもしれ...のように見えますonResult

    <HttpPost()> _ 
        Function Create(ByVal collection As ExternalMail) As ActionResult 
    
    0

    denasが言ったように、あなたは返さtextStatusとerrorThrownに何があるかを検査する必要がありますが、200 HTTPコード以外の何かが戻ってきたことができ、あなたのコードはまだそうである(うまく実行されているので、変数を生成あなたのレコードがデータベースに追加されたことを報告しているからです)。 200 HTTPコードが "成功"機能をトリガーし、私は今思い出すことができませんが、4xxまたは5xxの何かが "エラー"機能を引き起こすはずです。

    error: function(jqXHR, textStatus, errorThrown) { 
        console.log(textStatus); 
        console.log(errorThrown); 
    } 
    

    をして教えてください:

    ここで考慮すべき主なものは、それが

    がするようにコードを変更し

    jqueryのAJAX呼び出しにトリガーされるどのような機能を制御するもので、WebサーバのHTTP戻りコードがあるということですこれらのtextStatus変数とerrorThrown変数には何がありますか。

    関連する問題