Html中使用jquery通过Ajax请求WebService接口以及跨域问题解决

场景

VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用:

VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用_霸道流氓气质的博客-CSDN博客

在上面实现发布WebService的基础上,怎样在html中通过jquery对接口发起

请求和解析数据。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、WebSerivce返回json字符串。

这里直接使用转义后的json模拟数据

​
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string GetLocStatusInfo(string CardNum,string CardType)
        {
            return "{\"Code\":\"1\",\"Message\":\"\",\"result\":[{\"cardnum\":\"5904\",\"devNum\":\"31794\",\"isinwell\":\"1\"}]}";
        }
    }

​

2、新建html,并引入Jquery

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
     <script src="jquery-3.5.1.min.js" type="text/javascript"></script>
	<script type="text/javascript">
         window.setInterval(() => {
            //响应正常
            $.ajax({
              type: "get", 
              //这样会提示 缺少参数: CardNum。
              //url: `http://ip:8899/KjtxLocService.asmx/GetLocStatusInfo`,
              url: `http://ip:8899/KjtxLocService.asmx/GetLocStatusInfo?CardNum=&CardType=3`,
              dataType: "xml",
              contentType: "application/xml",
              success: (result) => {
                let data = JSON.parse(result.getElementsByTagName('string')[0].innerHTML);
                console.log(data);
              },
              error: function(e) {
                console.log(e);
              },
            });
          }, 6000)	
	</script>
</head>
<body>

</body>
</html>

这里使用定时器对接口发起定时调用。

这里的contentType: "application/xml",是根据接口中的提示确定的

 

请求到数据后进行处理

let data = JSON.parse(result.getElementsByTagName('string')[0].innerHTML)

 

这是因为接口返回的是xml中包含着json字符串。

3、此时直接在浏览器中打开该html,查看控制台会提示跨域

需要修改webservice中的Web.config文件,在configuration中配置允许跨域请求

  <system.webServer>
    <!--配置为列出此目录的内容-->
    <directoryBrowse enabled="true"/>
    <!--配置允许跨域请求-->
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="*"/>
        <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>

如果需要在其他机器上远程访问,还需要在configuration开启如下配置

  <system.web>
    <!--配置允许远程调用webservices-->
    <webServices>
      <protocols>
        <add name="HttpSoap"/>
        <add name="HttpPost"/>
        <add name="HttpGet"/>
        <add name="Documentation"/>
      </protocols>
    </webServices>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>

修改位置

 

4、此时则不会再出现跨域提示,也能正常获取json数据了

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
jQuery跨域请求Web Service可以使用JSONP技术来实现。JSONP是一种跨域数据交互的方式,它利用了`<script>`标签可以跨域访问的特性,通过动态创建`<script>`标签来加载返回指定格式数据的JavaScript文件,从而实现跨域请求数据的目的。 在使用jQuery进行JSONP请求时,需要将`dataType`参数设置为`jsonp`,并在`url`参数添加一个回调函数的参数名,用于指定回调函数的名称。Web Service需要将返回数据包裹在回调函数,以便客户端在收到数据后能够正确的解析和处理。具体用法如下: ```javascript $.ajax({ url: "http://example.com/MyWebService.asmx/MyMethod?callback=?", method: "GET", dataType: "jsonp", success: function(data) { console.log(data); }, error: function(error) { console.error(error); } }); ``` 其,`url`表示Web Service的请求地址,需要将回调函数的参数名设置为`callback=?`,`method`表示请求的方法为GET,`dataType`表示请求的返回数据类型为JSONP格式。在`success`回调函数,可以通过`data`获取返回的数据内容。在`error`回调函数,可以处理请求失败的情况。Web Service需要将返回数据包裹在回调函数,回调函数名由客户端指定。例如,如果客户端指定的回调函数名为`myCallback`,则Web Service返回的数据应该如下所示: ```javascript myCallback({"result": "success"}); ``` 其,`{"result": "success"}`表示返回的数据内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值