似乎无法想出这个。
我有一个定义为(c#,。net)
的Web服务[WebMethod]
public string SubmitOrder(string sessionid, string lang,int invoiceno,string email,string emailcc)
{
//do stuff.
return stuff;
}
当我在Vstudio中从自动生成的测试中测试它时,哪个工作正常。
但是当我把它从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
});
我得到了这个有趣的错误:
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()
数据评估为:{'sessionid' : 'f61f8da737c046fea5633e7ec1f706dd','lang': 'SE','invoiceno': '11867','email':'steve@jobs.com','emailcc':''}
好的,公平的,但是来自jquery的这个函数与另一个web服务很好地沟通。
定义:
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
});
}
答案 0 :(得分:3)
data: {sessionid: sessionid,
lang: usersettings.Currlang,
invoiceno: invoicenr,
email: $j(orderids.txtOIEMAIL).val(),
emailcc: $j(orderids.txtOICC).val()
},
答案 1 :(得分:1)
请参阅http://encosia.com/2010/05/31/asmx-scriptservice-mistake-invalid-json-primitive/
短版是, 请务必使用此格式将数据设置为字符串
//对了 $就({ 类型:'POST', contentType:'application / json', dataType:'json', url:'WebService.asmx / Hello', 数据:'{FirstName:“Dave”,姓氏:“Ward”}' });
它必须是字符串中的双引号。
答案 2 :(得分:1)
答案 3 :(得分:0)
删除单引号;
data: "{sessionid : "+sessionid+","+
"lang: "+usersettings.Currlang+","+
"invoiceno: "+invoicenr+","+
"email:"+$j(orderids.txtOIEMAIL).val()+","+
"emailcc:"+$j(orderids.txtOICC).val()+"}",
contenttype: "application/json; charset=utf-8",
并将花括号移到引号之外
答案 4 :(得分:0)
数据应该更像数据:{sessionid:sessionid,lang:usersettin ...
你现在发送它的方式,它是一个字符串..所以你的应用程序没有得到变量sessionID和它的值。
因此,它报告错误。这个错误不是json,所以responseText会抛出一个错误。