如何将带有$ ajax的JSON参数传递给asmx Web服务

时间:2015-12-16 07:08:49

标签: c# jquery asp.net ajax asmx

我的参数如下:

var pMaster = '{"tid" : "474", "fid":"2"}';
var pDetail = '[{"recid":5618,"tid":"474","itemid":"1435","nar1":""},{"recid":5619,"tid":"474","itemid":"1203","nar1":""},{"recid":5620,"tid":"474","itemid":"1205","nar1":""}]';
var e = '{PurcMast: ' + pMaster  + ', PurDetail: ' + pDetail + '}';

我在下面调用ajax

$.ajax({
        type: "POST",
        url: "WebService.asmx/saveValue",
        data: e,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            alert(result.d);
        },
        error: function (jqXHR) { alert(jqXHR.responseText); }
    });

WebService.asmx代码如下:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]    
public void saveValue(string PurcMast, string PurDetail)
{
    System.Data.DataTable purMaster = Common.CommonFunction.convertJSON2Table(Purchase);
    System.Data.DataTable purDetail = Common.CommonFunction.convertJSON2Table(PurchaseDetail);
}

我收到如下错误:

  

未捕获错误。{&#34;消息&#34;:&#34;没有为\ u0027System.String \ u0027类型定义无参数构造函数。&#34;,&#34; StackTrace&#34;:&# 34; at System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject(IDictionary 2 dictionary, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary 2 rawParams)\ r \ n在System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target,IDictionary 2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary 2 rawParams )\ r \ n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)&#34;,&#34; ExceptionType&#34;:&#34; System.MissingMethodException&#34;} < / p>

伙计们,请帮助我,我不明白我在做什么。

3 个答案:

答案 0 :(得分:3)

我在我的网站上这样做。这就是我必须做的......

#include<stdlib.h>

这对我有用。你只是创建字符串而不是序列化的json对象。

答案 1 :(得分:0)

我猜你是以错误的方式传递数据。试试这个:

var pMaster = '{"tid" : "474", "fid":"2"}';
var pDetail = '[{"recid":5618,"tid":"474","itemid":"1435","nar1":""},{"recid":5619,"tid":"474","itemid":"1203","nar1":""},{"recid":5620,"tid":"474","itemid":"1205","nar1":""}]';

$.ajax({
        type: "POST",
        url: "WebService.asmx/saveValue",
        data: {PurcMast: pMaster, PurDetail: pDetail },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            alert(result.d);
        },
        error: function (jqXHR) { alert(jqXHR.responseText); }
    });

答案 2 :(得分:0)

您的网址为url: "WebService.asmx/saveValue",而方法名称为savePurchase

$.ajax({
        type: "POST",
        url: "WebService.asmx/savePurchase",
        data: e,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            alert(result.d);
        },
        error: function (jqXHR) { alert(jqXHR.responseText); }
    });

我认为这应该有用。