我有以下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.这意味着什么也没发送。
答案 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
}));
请参阅:
注意参数名称引用的区别?