1

JScript が $.ajax() メソッドをサポートしていないことを示す IE9 の次のコードと、FF ではエラーが表示されていませんが、実行するはずのタスクが実行されていません。aspx コードとコード ビハインド メソッドも添付しています。コード ビハインドに必要なすべてのライブラリが含まれています。

<table class="style3">
    <tr>
        <td><label id="lname" >Name</td>
        <td><input id="name" type="text" runat="server"/></td>
    </tr>
    <tr>
        <td><label id="ldept">Department</label></td>
        <td><select id="dept">
        <option value="TnH">Travel & Hospitality</option>
        <option value="BFS">Banking & Financial Services</option>
        <option value="Insurance">Insurance</option>
        <option value="Communication">Communication</option>
        <option value="HealthCare">HealthCare</option>
        </select> 
    </td>
    </tr>
    <tr>
        <td><label id="lcontact">Contact</label></td>
        <td><input id="contact" type="text" runat="server"/></td>
    </tr>
    <tr>
        <td><label id="lage">Age</label></td>
        <td><input id="age" type="text" runat="server"/></td>
    </tr>
</table>
</div>
<asp:Button ID="hdnBtn" runat="server" onclick="AddEmployee" />
<asp:HiddenField ID="hname" runat="server" />
<asp:HiddenField ID="hdept" runat="server" />
<asp:HiddenField ID="hcontact" runat="server" />
<asp:HiddenField ID="hage" runat="server" />
</form>
<script type="text/javascript">



 $(document).ready(function()
    {
        $("#dialog-form").parent().appendTo($("form:first"));
        var hdnBtn=document.getElementById("<%=hdnBtn.ClientID %>");
        $("#hdnBtn").hide();
        $("#diaglog-form").hide();   
        $("#addBtn").click(function()
        {
        $("#diaglog-form").show();   
            $("#diaglog-form").dialog(
            {
                open:function()
                {
                    $("#this").parent().appendTo($("form:first"));
                },
                title: 'Add New Employee',
                modal:true,
                minHeight:300,
                minWidth:440,

                buttons:
                {
                    Add:function()
                    {   

//                        $("#hname").val($("#name").val());
//                        $("#hdept").val($("#dept").val());
//                        $("#hcontact").val($("#contact").val());
//                        $("#hage").val($("#age").val());
//                        $("#hdnBtn").click();
                        var name=name.val();
                        var dept=dept.val();
                        var contact=contact.val();
                        var age=age.val();
                        $.ajax({
                        type: "POST",
                        url: "Default.aspx/GetData",
  //                      data: "{name: '" + name.val() + "',dept:"+dept.val()+"',contact:"+contact.val()+"',age:"+age.val()+"'}",
                        data: {name:name,dept:dept,contact:contact,age:age},
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        async: true,
                        processData:false,
                        success : function(data) 
                        { 
                        // in case you would use a return value in your webmethod
                        $("#btnAllEmp").click();
                        $(this).dialog("close");
                        }
                        });


                    },
                   close:function()
                   {
                        $(this).dialog("close");
                   }
                }
            }
            );
        });
    });
    </script>

私が添付したライブラリ:-

<script src="JQuery/jquery-1.9.0.min.js" type="text/javascript" />
     <script src="JQuery/jquery.ui.dialog.js" type="text/javascript"></script>
    <script src="JQuery/jquery-1.9.1.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.core.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.widget.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.mouse.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.button.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.draggable.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.position.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.resizable.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.button.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.dialog.js" type="text/javascript"></script>
    <script src="JQuery/jquery.ui.effect.js" type="text/javascript"></script>

    <link href="Stylesheets/jquery.ui.dialog.css" rel="stylesheet" type="text/css" />
    <link href="Stylesheets/jquery.ui.all.css" rel="stylesheet" type="text/css" />
     <link href="Stylesheets/jquery-ui.css" rel="stylesheet" type="text/css" />

コード ビハインド メソッド:-

[WebMethod]
        public static void GetData(string jsonData)
        {
            //string name = collection["name"] as string;
            //string dept = collection["dept"] as string; ;
            //string contact = collection["contact"] as string; ;
            //string age = collection["age"] as string; ;

            EmployeeEntity emp = new EmployeeEntity();
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            emp = serializer.Deserialize<EmployeeEntity>(jsonData);

            string name = emp.EmpName;
            string dept = emp.EmpDept;
            string contact = emp.EmpContact;
            string age = emp.EmpAge;
            string text = name + " " + dept + " " + contact + " " + age + " ";
            System.IO.File.WriteAllText(@"D:\WriteText.txt", text);

            SqlConnection connection = new SqlConnection(conString);
            String cmdText = "INSERT INTO EMPLOYEE VALUES('" + name + "','" + dept + "','" + contact + "','" + age + "')";
            SqlCommand command = new SqlCommand(cmdText, connection);
            command.Connection.Open();
            command.ExecuteNonQuery();

        }

[編集]

var name=$("#name").val();
                        var dept=$("#dept").val();
                        var contact=$("#contact").val();
                        var age=$("#age").val();
                        var data=JSON.stringify({name:name,dept:dept,contact:contact,age:age});
                        $.ajax({
                        type: "POST",
                        url: "Default.aspx/GetData",
  //                      data: "{name: '" + name.val() + "',dept:"+dept.val()+"',contact:"+contact.val()+"',age:"+age.val()+"'}",
                        data: data,
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        async: true,
                        processData:false,
                        success : function(data) 
                        { 
                        // in case you would use a return value in your webmethod
                        $("#btnAllEmp").click();
                        $(this).dialog("close");
                        }
                        });

JQuery 1.10.2 を使用した後、$.ajax() が認識されるようになりました。

[編集1]

error:function(resp,textStatus,errorThrown)
                        {
                            alert("Error : "+errorThrown);
                        }
                        });

「エラー:内部サーバーエラー」が表示されます。今すぐ助けてください

4

3 に答える 3

0

このようにパラメータを変更してみてください

JSON.stringify({name:name,dept:dept,contact:contact,age:age}),

そして、これらの価値がどこに来ているのか

 var name=name.val();
 var dept=dept.val();
 var contact=contact.val();
 var age=age.val();
于 2013-09-12T07:15:34.730 に答える
0

これは、ajax 呼び出しのパラメーターが Web メソッドのパラメーターと一致しないためです。クライアントでこれ:

...data: {name:name,dept:dept,contact:contact,age:age},..

そしてあなたのWebメソッドにはこれがあります:

public static void GetData(string jsonData)

他に問題がない場合の解決策は、それらを一致させることです。サーバー上で、メソッドの署名を次のように変更できます。

public static void GetData(string name, string dept, string contact, string age)

そうすれば、サーバー側で行っているすべての逆シリアル化を削除し、パラメーターに直接アクセスできるようになります。

あなたの Web メソッドは、書かれているように、SQL インジェクションに対して脆弱であることに注意してください! パラメーターを渡して、データベースですぐに実行されるオンザフライで SQL を記述します。

于 2013-09-12T07:19:57.427 に答える