AJAX to asmx(VB)webmethod - 使用参数

时间:2015-11-27 18:43:33

标签: javascript json ajax web-services asmx

我一直在阅读很多关于这个错误的问题,但似乎无法绕过它(令人难以置信的是,在这个主题的网络上可以找到多少问题!!)。让我直截了当:

test.asmx

'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),以在客户端和服务器函数之间建立一个通用桥梁。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案(但不是答案)。据朋友介绍,GET不接受json参数。不幸的是,即使我发送dataType:“text”,它也会失败。

解决方案是始终使用POST。 POST也能够返回数据(不知道)。因此,使用POST示例,我可以毫无问题地以json格式发送和接收数据。