使用JSON从jQuery调用Web服务

Jon*_*ood 1 c# ajax jquery web-services asmx

真痛苦!我正在尝试从JavaScript调用Web服务,但似乎无法找到使其正常工作所需的魔力。

我的代码如下所示:

JavaScript:

$.ajax({
    url: "/Services/CompanyContactServices.asmx/AddContact",
    type: 'POST',
    contentType: "application/json",
    dataType: "json",
    data: {
        companyId: 3725, firstName: firstName, lastName: lastName, email: email
    },
    success: function (data) {
        alert('Success!');
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }
});
Run Code Online (Sandbox Code Playgroud)

Web服务(asmx.cs):

[WebService(Namespace = CompanyListServices.XmlnsNamespace)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class CompanyContactServices : System.Web.Services.WebService
{
    public const string XmlnsNamespace = "mynamespace";

    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string AddContact(int companyId, string firstName, string lastName, string email)
    {
        return new JavaScriptSerializer().Serialize(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

AddContact方法开始时的断点永远不会到达。

error对我的处理程序ajax()调用包含以下错误信息jqXHR

{Message“:”无效的JSON原语:companyId“,” StackTrace“:”在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32深度) System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化器,字符串输入,类型,Int32 depthLimit)在Web.System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串输入,Int32 depthLimit,JavaScriptSerializer序列化器)。 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext上下文,JavaScriptSerializer序列化器)的Script.Serialization.JavaScriptSerializer.Deserialize [T](字符串输入),位于System.Web.Script.Services.RestHandler。System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)上的GetRawParams(WebServiceMethodData methodData,HttpContext上下文)“,” ExceptionType“:” System.ArgumentException“}”

Chrome报告以下网络数据:

要求网址:... / Services / CompanyContactServices.asmx / AddContact

请求方法:POST

状态码:500内部服务器错误

谁能看到我所缺少的吗?

lol*_*lol 5

{ companyId: 3725, firstName: firstName, lastName: lastName, email: email }
Run Code Online (Sandbox Code Playgroud)

上面的代码是一个javascript对象,而不是JSON。JSON是javascript对象的字符串表示形式。现代浏览器已json.stringify实现,但是如果您打算控制降级,则需要像JSON3这样的polyfill

例:

var company = {companyId: 3725, firstName: firstName, lastName: lastName, email: email};
var json = JSON.stringify(company);
Run Code Online (Sandbox Code Playgroud)