处理ajax调用不了webService的问题
写一个webService做为后台,然后前台用ajax调用,无论怎么调用都报abort的错误。然后开始排查错误原因。
1、把之前项目中已经可以正常调用的代码复制、粘贴过来,然后把地址换成现在这个地址,发现报错abort。就说明是后台的问题了。
2、在试着把后台的代码复制到之前能够正常运行的后台上面,然后通过之前的webService的地址去调用这个接口,发现可以正常调用了,这说明是新建的这个webService的问题。
3、然后通过对比发现,在新的webService中,要添加一些配置才能够正常被调用,否则就会一直地报错。
4、修改web.config文件下面的<system.webServer>,在里面添加如下配置,就能正常的被调用了。
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/> <add name="Access-Control-Allow-Origin" value="*" />
5、附加完整的配置
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> <validation validateIntegratedModeConfiguration="false"/> <modules> <remove name="ApplicationInsightsWebTracking"/> <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler"/> </modules> </system.webServer>
添加这一段配置的意思就是允许用户跨域请求,之前请求失败的原因就是因为不在一个段里面,所以就请求失败了。
关于跨域请求的问题,还有另一种方法就是不需要配置,直接使用jsonp请求方式请求。
如果把这一段配置删除,使用jsonp调用,可能也会成功。具体暂时还没有测试过,这里就先不说了。
关于配置的问题,还有另一种方法:就是直接在IIS的网站的HTTP响应标头里面添加,具体操作就不写出来了,可以参考如下地址进行配置:https://www.moyublog.com/notes/634.html
其实添加这个配置也是跨域请求的一种处理方式,这种方式叫做CORS处理方式。跨域请求的处理方式主要有两种:
1、jsonp的处理方式,这个方式主要是客户端的处理方式。
2、CORS的处理方式,这个方式主要是服务端的处理方式,主要是在服务端添加一些配置等等。
3、关于跨域请求的处理方式,这里就不详细说了,具体的可以参考:https://www.cnblogs.com/yangecnu/p/introduce-cross-domain.html