当数据密钥没有要发送的数据(即数据)时,以下代码将正确执行:“ {}”为空的JSON对象,并且Web服务不接受任何参数。我想将一些数据发布到Web服务,但是遇到了麻烦。
当我尝试将其设置为data:“ {‘name’:’Niall’,’surname’:’Smith’}”时,出现错误
{"Message":"Invalid web service call, missing value for parameter: \u0027json\u0027.","StackTrace":" at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)\r\n at 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 at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}
Web服务未执行。
这是我的Jquery调用,用于将我的数据发布回服务器。
$.ajax({ type: "POST", url: "/WebServices/BasketServices.asmx/AddItemToBasket", data: "{'name':'niall'}", // Is this Correct?? contentType: "application/json; charset=utf-8", dataType: "json", success: OnItemAddedSuccess }); function OnItemAddedSuccess(result,eventArgs) { //deserialize the JSON and use it to update the Mini Basket var response = JSON.parse(result.d); }
这是我的WebService
[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] [System.Web.Script.Services.ScriptService] public class BasketServices : System.Web.Services.WebService { [WebMethod(true)] public string AddItemToBasket(string json) { //do stuff return myString.toJSON(); } }
可能是什么问题?是要发布的JSON数据的格式吗?可能是我没有在WebService上设置正确的属性。戴夫·沃德(Dave Ward)的帖子中提到的问题呢?
我已经尝试了所有我能想到的。有人有什么想法吗?
我认为Web服务希望json设置该参数。试试这个AJAX调用:
json
var data = {'name':'niall'}; $.ajax({ type: "POST", url: "/WebServices/BasketServices.asmx/AddItemToBasket", data: "json=" + JSON.stringify(data), contentType: "application/json; charset=utf-8", dataType: "json", success: OnItemAddedSuccess });
JSON.stringify()与“官方”实现中的方法类似的方法在哪里:http : //json.org/js.html
JSON.stringify()