首页 > php教程 > php手册 > 正文

ajax跨域往php程序post数据时,php程序总是执行两次的解决方法

WBOY
发布: 2016-08-08 08:49:47
原创
973 人浏览过

php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次。

第一个问题的解决方法,是百度出来的,添加下面几行代码就可以了:

header('Access-Control-Allow-Origin:*');

header("Access-Control-Allow-Headers: x-requested-with,content-type");

header('Access-Control-Allow-Methods: OPTIONS,POST,GET');

其实,也可以直接在iis里面设置,不用添加代码,直接选择站点,然后点右边的http响应标头,在里面直接配好,就可以了。如图:

第二个问题,一直没有百度出结果,只好FQ用google,一下就看明白了,然后顺着线索找,终于理清楚了。

在CORS .net 跨域解决方案里,是这样介绍的(http://jingyan.baidu.com/article/03b2f78c190ad25ea237ae33.html)

同一个请求需要两个相同请求地址的方法,一个标记为“POST”,另一个标记为“OPTIONS“,实体方法为标记”POST“的方法,这里”OPTIONS“方法不需要做任何逻辑操并且返回值为void即可(其实OPTIONS请求为浏览器的校验,发带参数的POST请求时浏览器会先发一个OPTIONS请求,检验request 头信息和response头信息一致后才真正发起POST请求)

抓包发现,确实如此,浏览器产生了两个请求,OPTIONS service/service.php HTTP/1.1和POST /service/service.php HTTP/1.1

本想着像文中说的那样,让请求OPTIONS时,直接返回void,但是在看到配置php的时候,可以直接限制动作。试了一下,果然有用,现在ajax跨域,php程序只执行一次了。

iis里配置方法如下:找到php程序站点,也可以选择服务器设置,点右边的处理程序映射,找到php,点编辑,在弹出对话框里,点请求限制,再选谓词,点下面谓词之一,按照提示的输入GET,POST,我是之前为了省事,直接是默认选项(全部谓词),所以才遇到了这个问题。 如图:

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!