Как передать параметр JSON с помощью $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);
}
Я получаю ошибку, как показано ниже:
Ребята, пожалуйста, помогите мне, я не понимаю, что плохого я делаю.Необнаруженная Ошибка.{"Message": "для типа u0027System не определен конструктор без параметров.Строкаu0027.", "StackTrace": "в системе.Сеть.Скрипт.Сериализация.Преобразователь объектов.ConvertDictionaryToObject(IDictionary
2 dictionary, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Objectu0026 convertedObject)rn at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Objectu0026 convertedObject)rn at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Objectu0026 convertedObject)rn at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary
2 rawParams)rn at Система.Сеть.Скрипт.Сервисы.WebServiceMethodData.Callmethod fromrawparams (Object target, IDictionary2 parameters)rn at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary
2 rawParams)rn в системе.Сеть.Скрипт.Сервисы.RestHandler.ExecuteWebServiceCall (HttpContext context, WebServiceMethodData methodData)", "ExceptionType": "System.MissingMethodException"}
3 ответа:
Я делаю это на своем сайте. Вот что я должен был сделать...
Это сработало для меня. Вы просто создавали строки вместо сериализованных объектов json.// remove the outer quotes so they are json objects then json encode. var pMaster = JSON.stringify({"tid" : "474", "fid":"2"}); var pDetail = JSON.stringify( {"[{"recid":5618,"tid":"474","itemid":"1435","nar1":""}, {"recid":5619,"tid":"474","itemid":"1203","nar1":""}, {"recid":5620,"tid":"474","itemid":"1205","nar1":""}]); // then create e by stringify a second time var e = JSON.stringify({PurcMast: pMaster , PurDetail: pDetail });
Я думаю, что вы передаете данные неверным путем. Попробуйте это:
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); } });
Ваш URL-адрес
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); } });