【发布时间】:2013-12-16 16:45:54
【问题描述】:
[已解决]
我做了一个小测试项目来学习如何使用 WCF 对象和 Json。如果您有任何好的资源/教程,请告诉我。
我正在尝试使用一些 jQuery 脚本通过 id 获取自定义对象 User,这样做时我的服务失败且没有消息。返回像int 或string 这样的“已知”对象可以正常工作,所以我认为我的web.config 应该没问题
IService
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
User GetUser(int id);
}
[DataContract]
public class User
{
[DataMember]
public int id { get; set; }
[DataMember]
public string name { get; set; }
}
Service.svc.cs
[AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService
{
public User GetUser(int id)
{
return new User() { id=1, name="foo" };
}
}
Json
var Type;
var Url;
var Data;
var ContentType;
var DataType;
var ProcessData;
$(document).ready(
function() {
$("#log").append("<p>Document ready</p>");
GetUser();
}
);
function GetUser() {
$("#log").append("<p>Called GetUser</p>");
var userid = "1";
Type = "POST";
Url = "http://localhost:4270/Service.svc/GetUser";
Data = '{"Id": "' + userid + '"}';
ContentType = "application/json; charset=utf-8";
DataType = "json";
varProcessData = true;
CallService();
}
function CallService() {
$("#log").append("<p>Called CallService</p>");
$.ajax({
type: Type,
url: Url,
data: Data,
contentType: ContentType,
dataType: DataType,
processdata: ProcessData,
success: function(msg) {
ServiceSucceeded(msg);
},
error: ServiceFailed
});
}
function ServiceSucceeded(result) {
$("#log").append("<p>ServiceSucceeded</p>");
if (DataType == "json") {
user = result.GetUserResult;
$("#result").append("<p> user = " +user+ "</p>");
$("#result").append("<p> id = " +user.id+ "</p>");
$("#result").append("<p> name = " +user.name+ "</p>");
}
}
【问题讨论】:
-
不是很清楚吗?您递归调用 GetUser 而没有任何停止条件。
return GetUser(Convert.ToInt32(id)); -
是的.. 校对后我立即看到了.. 我有另一个错误,将编辑我的问题。
-
我注意到关于您的 jQuery 的另一个问题。您没有将 ajax 值传递给 CallService,因此您的 ajax 调用将不起作用。 TYPE、URL、DATA、CONTENTTYPE 等都是该函数范围内的未定义变量。你需要从你的 getUser() 方法中传递这些
-
@heymega 这些被定义为全局变量。我将编辑我的帖子