【发布时间】:2019-08-05 10:41:51
【问题描述】:
我有一个使用 WebForms 的网站。它有一项过去可以工作的服务,但我的主机最近将该站点迁移到了新服务器。数据库连接正常,但我的 asmx 服务现已中断。
我有这个签名:
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public string GetJarLabel(string type, string serialized)
{
我用这个 jQuery 调用:
var requestData = {
"type": "jam",
"serialized": JSON.stringify(data)
};
$.ajax({
type: "POST",
url: "/Labels.asmx/GetJarLabel",,
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: false,
data: JSON.stringify(requestData),
error: function(xhr, status, ex) {
...snip
},
success: function(r) {
...snip
}
});
据我所知,请求似乎已提交,但服务响应 500: Invalid web service call, missing value for parameter: 'type'. 我尝试切换到 GET,字符串化,不字符串化,但没有任何效果。我确信这在迁移之前有效,但看不出这会如何影响它。
【问题讨论】:
-
我不相信 ASMX WebMethods 可以接受 JSON 作为输入。他们可以退货,但不确定他们是否可以接受。试试这个:删除
processData: false,并将data: JSON.stringify(lblData),更改为data: lblData,。然后,jQuery 会自动为您对数据参数进行 url 编码。 -
P.S.在上面的代码中,我不知道这是否是拼写错误,但您将
lblData发送到服务器,但它没有定义。您定义了requestData但未使用。我假设这只是一个错误,而不是您的真实代码? -
OTOH,如果您说这曾经可以工作...并且这取决于新服务器上的某些内容,那么服务器之间进行了哪些更改?您是否要求托管公司提供与新服务器的差异列表?也许某处有不同版本的东西。尽管它会影响像这样具体的事情似乎很奇怪。也许您的代码运行在不同版本的 .NET 或其他东西上,这就是我能想到的。
-
@ADyson lblData/requestData 是一个错字,我合并了两种方法来发布这个。我最初省略了
processData -
" 我最初省略了 processData" 。好的,您是否也同时省略了 JSON.stringify() ?这两件事真的是在一起的。你在这里有一个如此简单的结构,你并没有特别将它作为 JSON 发送(毕竟,你将复杂的数据隐藏在“序列化”字符串中)
标签: jquery asp.net ajax web-services asmx