gpt4 book ai didi

asp.net - 从 ASMX 返回 JSON,并在 Javascript 中正确处理它

转载 作者:行者123 更新时间:2023-12-03 22:41:25 24 4
gpt4 key购买 nike

我意识到这里已经有很多类似的问题,但我无法弄清楚这个问题。

我有一个 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" />

非常感谢所有提供帮助的人。

最佳答案

在我看来,您的主要问题是您尝试手动使用 JavaScriptSerializer().Serialize 而不是返回对象。来自 Web 服务的响应将进行双重 JSON 编码。

你说得对!有很多密切的问题。看这里Can I return JSON from an .asmx Web Service if the ContentType is not JSON?Can't get jQuery Ajax to parse JSON webservice result你会(我希望)找到答案。

已更新:抱歉,您在未发布的地方有一个小错误。为了解决这个问题,我使用旧版本的 Visual Studio (VS2008) 创建了一个小项目,该项目几乎完全符合您的代码并且可以工作。我把它放在 http://www.ok-soft-gmbh.com/jQuery/WSMember.zip 。您可以下载它、编译并验证它是否有效。然后你可以将你的代码与我的代码进行比较并找到你的错误。

致以诚挚的问候

关于asp.net - 从 ASMX 返回 JSON,并在 Javascript 中正确处理它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3196569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com