似乎无法找出这一个。Javascript - jquery ajax发布错误使我生气
我有,当我从Vstudio自动生成测试啄测试,工作正常,定义为Web服务(C#,.网)
[WebMethod]
public string SubmitOrder(string sessionid, string lang,int invoiceno,string email,string emailcc)
{
//do stuff.
return stuff;
}
。
但是,当我把它从jQuery的作为
$j.ajax({
type: "POST",
url: "/wservice/baby.asmx/SubmitOrder",
data: "{'sessionid' : '"+sessionid+"',"+
"'lang': '"+usersettings.Currlang+"',"+
"'invoiceno': '"+invoicenr+"',"+
"'email':'"+$j(orderids.txtOIEMAIL).val()+"',"+
"'emailcc':'"+$j(orderids.txtOICC).val()+"'}",
contenttype: "application/json; charset=utf-8",
datatype: "json",
success: function (msg) {
submitordercallback(msg);
},
error: AjaxFailed
});
我得到这个有趣的错误:从{'sessionid' : 'f61f8da737c046fea5633e7ec1f706dd','lang': 'SE','invoiceno': '11867','email':'[email protected]','emailcc':''}
好,不够公平,但这种功能:
responseText: System.InvalidOperationException: Missing parameter: sessionid. at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection) at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request) at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
数据计算结果为jquery与其他webservice通信很好。
定义:
C#:
[WebMethod]
public string CheckoutClicked(string sessionid,string lang)
{
//*snip*
//jquery:
var divCheckoutClicked = function()
{
$j.ajax({
type: "POST",
url: "/wservice/baby.asmx/CheckoutClicked",
data: "{'sessionid': '"+sessionid+"','lang': '"+usersettings.Currlang+"'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
divCheckoutClickedCallback(msg);
},
error: AjaxFailed
});
}
你为什么要在Javascript中构建一个JSON字符串?jQuery完全可以接受一个Javascript数组/对象并自动将其转换为JSON字符串。没有必要手动构建一个 - 考虑如果您插入的任何变量包含引号字符会发生什么 - * boom * – 2010-06-11 05:31:17
数据参数需要一个适当的json对象。你提供的是一个字符串... – deostroll 2010-06-11 05:38:30
他在与字符串正确的轨道上。 ASMX ScriptServices期望它们的输入参数位于JSON字符串中,而不是URLEncoded键/值对。 jQuery URLE对数据参数进行编码,如果它是一个对象,它不适合传递给这种类型的服务。 – 2010-07-26 17:41:08