【发布时间】:2011-03-12 21:55:10
【问题描述】:
我意识到这里已经有大量类似的问题,但我无法弄清楚这一点。
我有一个 Web 服务(C#、.net 3.5)。您需要了解的基本代码如下:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WSMember : System.Web.Services.WebService {
public WSMember () {
}
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public string GetMember(string IdMember)
{
//Ignore the parameter for now... I will be looking up a database with it...
//For now just return a minimal object:
Member m = new Member();
m.Surname = "Smith";
m.FirstName = "John";
return new JavaScriptSerializer().Serialize(m);
}
另外,在 web.config 中,我添加了以下内容(我刚刚在其他帖子中看到...这正常/安全吗?)
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
</protocols>
</webServices>
然后在 Default.aspx 中,我的两个关键引用...
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="jquery.json-2.2.min.js" ></script>
jquery.json-2.2.min.js 是从google代码下载的
这里是 Javascript:
<script type="text/javascript">
$(document).ready(function() {
$("#button1").click(function(event) {
var myData = { IdMember: "2" };
var encoded = $.toJSON(myData);
alert(encoded);
$.ajax({
type: "POST",
url: "WSMember.asmx/GetMember",
data: encoded,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert("worked" + msg.d);
//$("#sidebar").append(msg);
},
error: function(msg) {
alert(msg.d);
//$("#sidebar").append(msg);
}
});
});
});
</script>
当我执行它时,编码后的 json 会按预期出现在消息框中...即带有双引号:
{ "IdMember":"2" }
但是,它总是失败。即使对于没有传入数据的最基本的 Hello World,它也会失败。我不断收到消息数据的“未定义”。
如果我只使用 alert(msg),它会显示 [object XMLHttpRequest]
有人知道我的数据在哪里丢失了吗?
还有一个问题……我所做的事情有什么根本错误吗?
非常感谢。
编辑:
感谢大家的回复。我已经尝试了以下...
UseHttpGet = true 现在更改为 false。 (再次 - 我在某处看到它,所以我尝试了它......但我知道它不可能是正确的:-/)
假设 Web 服务现在返回一个字符串。我按如下方式构建字符串(似乎有点疯狂......序列化它做了完全相同的事情......)
StringBuilder sb = new StringBuilder();
sb.Append("{");
sb.Append("\"Surname\":");
sb.Append("\"");
sb.Append(m.Surname);
sb.Append("\"");
sb.Append(",\"FirstName\":");
sb.Append("\"");
sb.Append(m.FirstName);
sb.Append("\"");
sb.Append("}");
return sb.ToString();
此代码返回如下内容:
{"Surname":"Smith","FirstName":"John"}
我仍然得到完全相同的错误......
我也尝试过返回对象“Member”之类的方法,因此代码变为:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Member GetMember(string IdMember)
{
Member m = new Member();
m.Surname = "Smith";
m.FirstName = "John";
return m;
}
这也会引发同样的错误。
很抱歉让您感到痛苦...我已经阅读了这两个链接以及其他链接。只是看不出这有什么不同。
是否有任何额外的配置设置我需要注意??
非常感谢您的回复。
更新: 问题已解决。上述代码的主要错误是:
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
应该是
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
另外,在表单上,当使用按钮调用 javascript 时,我错误地设置了输入类型...
<input id="button1" type="submit" value="Just a test" />
当它应该说:
<input id="button1" type="button" value="Just a test" />
非常感谢所有帮助过的人。
【问题讨论】:
标签: asp.net jquery ajax json asmx