使用 JSON 从 jQuery 调用 Web 服务

本文关键字:Web 服务 调用 jQuery JSON 使用 | 更新日期: 2023-09-27 18:35:15

多么痛苦!我正在尝试从 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);
    }
});

Web Service (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);
    }
}

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

我的ajax()调用的error处理程序在jqXHR中包含以下错误消息:

{ 消息":"无效的 JSON 原语:公司 ID。"StackTrace":"at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}"

Chrome 会报告以下网络数据:

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

请求方式:开机自检

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

谁能看到我错过了什么?

使用 JSON 从 jQuery 调用 Web 服务

{ companyId: 3725, firstName: firstName, lastName: lastName, email: email }

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

例:

var company = {companyId: 3725, firstName: firstName, lastName: lastName, email: email};
var json = JSON.stringify(company);