Javascript - jquery ajax发布错误让我发疯

时间:2010-06-11 05:19:08

标签: c# jquery ajax web-services asmx

似乎无法想出这个。

我有一个定义为(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
    });     
}

5 个答案:

答案 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会抛出一个错误。