您的位置:首页 > Web前端 > JavaScript

dojo调用.net webservice并返回json

2012-02-09 19:34 453 查看
1.首先准备webservice,如下:

[WebService(Namespace = "http://weibo.com/yelloweast")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string SayHello(string name)
{
return "Hello " + name;
}

[WebMethod]
public People Hello()
{
People p = new People();
p.Name = "Yellow East";
p.Age = 27;

return p;
}

public class People
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}

private int age;
public int Age
{
get { return age; }
set { age = value; }
}
}
} 说明,这里重点是需要打开客户端脚本支持,即加上[System.Web.Script.Services.ScriptService]。

2. 客户端通过dojo调用:

<script type="text/javascript">
function init() {
//将待传入的Web方法参数转换为json格式
var myname = dojo.toJson({ "name": "yelloweast" });
//构造dojo.xhrPost方法的参数
var xhrArgs = {
//web service的地址,具体到方法名称,不能在此接参数
url: "http://esri-huangd/WaterEnvironment/services/WebService1.asmx/SayHello",
//让web service以json方式对待传入的参数
handleAs: "json",
headers: { "Content-Type": "application/json" },//或者contentType: "application/json", //如果web方法没有参数,则下一行可不写(写了也没事儿)
postData: myname,
//调用成功时的处理函数
load: loadHandler,
//调用失败时的处理函数
error: errorHandler
};
//以POST方式调用web service
dojo.xhrPost(xhrArgs);
}

function loadHandler(response) {
//直接取出返回的数据,如SayHello方法返回的结果:Hello yelloweast
alert(response.d);
//取出返回的对象的属性,如Hello方法返回的结果:Yellow East
//alert(response.d.Name);
}

function errorHandler(error) {
alert(error);
}

dojo.addOnLoad(init);
</script>

说明:response返回的结果,需要通过response.d来获取具体的对象,例如SayHello返回的字符串对象,或者Hello返回的People对象,而对于People对象,还可以通过response.d.Name获取其具体的属性;

3.关于postData和content

对于需要接收参数的Web方法,我也尝试过用content的方式来传入方法参数,结果总是出现各种错误:“无效的json基元:name”,以及“Web 服务调用无效,参数"name"缺少值”等。

读者可将postData: myname替换为content: myname进行测试,如果调用无参数的Web方法,则该属性被忽略,运行正常,如果是需要参数的Web方法,则使用content: myname会引发上面提到的各种错误。

这个地方我还没搞明白为什么,希望有朋友能帮我解惑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: