使用Internet Explorer 10时jquery中的Web服务错误

时间:2013-08-23 11:54:43

标签: jquery asp.net web-services

我有以下jQuery ajax代码,它调用ASP.NET webservice来保存数据库中的数据。

function SaveDataToParty() {
            var mode = "Save";
            var srno = 0;
            var partyname = $("#p1").val();
            var partyemail = $("#p2").val();
            var partyphone = $("#p3").val();
            var partyaddress = $("#p4").val();
            var webMethod = "../Service/DatabaseHandling.asmx/SaveDataToParty";
            var parameters = "{mode:'" + mode + "',srno:'" + srno + "',partyname:'" + partyname + "',partyemail:'" + partyemail + "',partyphone:'" + partyphone + "',partyaddress:'" + partyaddress + "'}";
            alert(parameters);
            $.ajax({
                type: "POST",
                url: webMethod,
                async:false,
                data: JSON.stringify(parameters),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    alert(msg.d);
                },
                error: function (e) {
                    alert(e.statusText);
                }
            });
        }

此调用遵循asp.net中的webservice方法

<WebMethod()> _
Public Function SaveDataToParty(mode As String, srno As String, partyname As String, partyemail As String, partyphone As String, partyaddress As String) As Boolean
    'this will start connection and set transaction to it
    Dim cnstr As String = String.Empty
    cnstr = System.Configuration.ConfigurationManager.ConnectionStrings("DPMTConnectionString").ConnectionString
    Dim cn As New SqlConnection(cnstr)
    Dim tran As SqlTransaction
    cn.Open()
    tran = cn.BeginTransaction
    Try
        'this will handle sp coding
        Dim dcmd As New SqlCommand
        dcmd.Connection = cn
        dcmd.CommandType = CommandType.StoredProcedure
        'sp execution for party entry
        If mode = "Save" Then
            dcmd.Parameters.Add("@mode", SqlDbType.NVarChar).Value = "ADD"
            dcmd.Parameters.Add("@srno", SqlDbType.Int).Value = 0
        End If
        If mode = "Update" Then
            dcmd.Parameters.Add("@mode", SqlDbType.NVarChar).Value = "UPDATE"
            dcmd.Parameters.Add("@srno", SqlDbType.Int).Value = srno
        End If

        dcmd.Parameters.Add("@partyname", SqlDbType.NVarChar).Value = partyname
        dcmd.Parameters.Add("@partyemail", SqlDbType.NVarChar).Value = partyemail
        dcmd.Parameters.Add("@partyphone", SqlDbType.NVarChar).Value = partyphone
        dcmd.Parameters.Add("@partyaddress", SqlDbType.NVarChar, 500).Value = partyaddress

        dcmd.CommandText = "sp_add_update_delete_party"
        dcmd.Transaction = tran
        dcmd.ExecuteNonQuery()
        tran.Commit()
        Return True
    Catch ex As Exception
        Return False
    Finally
        cn.Close()
    End Try
End Function

该错误仅在Internet Explorer 10中生成。 错误是“无效的Web服务调用,缺少参数值:\ u0027mode \ u0027”

它在Google Chrome中运行良好。

任何解决方案?

编辑1

我用JSON.stringify和async:false更新了这个,但IE10仍然没有成功。

编辑2

在IE10 Developer工具中,在网络选项卡中,显示以下信息。

Key Value
Request POST /hemal/ASPNET/DPMT/Service/DatabaseHandling.asmx/SaveDataToParty HTTP/1.1
Accept  application/json, text/javascript, */*; q=0.01
Content-Type    application/json; charset=utf-8
X-Requested-With    XMLHttpRequest
Referer http://localhost/hemal/ASPNET/DPMT/ADMIN/Purchase_Add.aspx
Accept-Language en-IN,en-GB;q=0.8,en;q=0.5,gu;q=0.3
Accept-Encoding gzip, deflate
User-Agent  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Host    localhost
Content-Length  0
DNT 1
Connection  Keep-Alive
Cache-Control   no-cache
Cookie  ASP.NET_SessionId=mhp35fbfn3vzoalqvdild5hb; loginstatus=ok

我很震惊为什么内容长度为0.这意味着什么也没发送。

1 个答案:

答案 0 :(得分:0)

我无法重现它;然而,对我来说似乎有些可疑的一点是,你正在将自己的json字符串化,即

var parameters = "{mode:'" + mode + "',srno:'" + srno + "',partyname:'" + partyname + "',partyemail:'" + partyemail + "',partyphone:'" + partyphone + "',partyaddress:'" + partyaddress + "'}";

您的实现与JSON2.js实现之间存在差异。你可以写:

JSON.stringify({
            mode: mode,
            srno: srno,
            partyname: partyname,
            partyemail: partyemail,
            partyaddress: partyaddress
        }));

请参阅:

http://jsfiddle.net/DwTge/9/

注意参数名称引用的区别?