我一直在阅读很多关于这个错误的问题,但似乎无法绕过它(令人难以置信的是,在这个主题的网络上可以找到多少问题!!)。让我直截了当:
'Simple POST (obviously with parameters)
<WebMethod(EnableSession:=True)>
<ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Json)>
Public Function TestarPost(ByVal Valor as String) As String
Dim x
End Function
'Simple GET - no parameters
<WebMethod(EnableSession:=True)>
<ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)>
Public Function Testar() As String
return "ok ;>D"
End Function
'GET with parameters
<WebMethod(EnableSession:=True)>
<ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)>
Public Function TestarGet(ByVal Valor as String) As String
return Valor
End Function
在js控制台窗口中尝试:
obj = { Valor: "x" }
$.ajax({
type: "POST",
url: "test.asmx/TestarPost",
dataType: "json",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
success: function(ret) {
console.log(ret.d);
},
error: function(xhr,textStatus,errorThrown) {
console.log(xhr.status + "||" + xhr.responseText);
}
});
成功!
$.ajax({
type: "GET",
url: "ServerSide.asmx/Testar",
contentType: "application/json; charset=utf-8",
success: function(ret) {
console.log(ret.d);
},
error: function(xhr,textStatus,errorThrown) {
console.log(xhr.status + "||" + xhr.responseText);
}
});
成功!以JSON格式正确返回数据
$.ajax({
type: "GET",
url: "test.asmx/TestarGet",
dataType: "json",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
success: function(ret) {
console.log(ret.d);
},
error: function(xhr,textStatus,errorThrown) {
console.log(xhr.status + "||" + xhr.responseText);
}
});
失败!执行与帖子
相同的操作
消息错误是“无效的Web服务调用,缺少参数值:\ u0027Valor \ u0027”。如果我发送对象文字(“Invalide JSON基元”)也会失败。但是,如果我访问URL ... / ServerSide.asmx / TestarGet?Valor = x,它返回“opa”(也许是一个线索?)
我没有得到(原谅双关语)是为什么,因为它和POST一样。也许是因为POST没有影响任何东西,我看不到结果(但至少没有返回任何错误)。
我的目标是创建一个函数 serverSide(asmxMethod,obj),以在客户端和服务器函数之间建立一个通用桥梁。
答案 0 :(得分:0)
我找到了解决方案(但不是答案)。据朋友介绍,GET不接受json参数。不幸的是,即使我发送dataType:“text”,它也会失败。
解决方案是始终使用POST。 POST也能够返回数据(不知道)。因此,使用POST示例,我可以毫无问题地以json格式发送和接收数据。