1

なんて痛い!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 サービス (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到達しません。

呼び出しのerrorハンドラにajax()、次のエラー メッセージが含まれていますjqXHR

{ Message":"無効な JSON プリミティブ: companyId."、"StackTrace":"at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System .Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(文字列入力、Int32 depthLimit、JavaScriptSerializer シリアライザー) System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer シリアライザー、文字列入力、Type 型、Int32 depthLimit) System.Web で。 Script.Serialization.JavaScriptSerializer.Deserialize[T] (文字列入力) System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest (HttpContext コンテキスト、JavaScriptSerializer シリアライザー) で System.Web.Script.Services.RestHandler で。System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext コンテキスト、WebServiceMethodData methodData) で GetRawParams (WebServiceMethodData methodData、HttpContext コンテキスト)"、"ExceptionType":"System.ArgumentException"}"

Chrome は次のネットワーク データを報告します。

リクエスト URL:.../Services/CompanyContactServices.asmx/AddContact

リクエスト方法:POST

ステータス コード:500 内部サーバー エラー

誰かが私が見逃しているものを見ることができますか?

4

1 に答える 1

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

上記のコードは、JSON ではなく JavaScript オブジェクトです。JSON は、JavaScript オブジェクトの文字列表現です。最新のブラウザーはjson.stringify実装されていますが、劣化を制御する予定がある場合は、 JSON3 のようなポリフィルが必要です。

例:

var company = {companyId: 3725, firstName: firstName, lastName: lastName, email: email};
var json = JSON.stringify(company);
于 2013-10-14T20:42:38.970 に答える