程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> ajax跨域往php程序post數據時,php程序總是執行兩次的解決方法,ajaxpost

ajax跨域往php程序post數據時,php程序總是執行兩次的解決方法,ajaxpost

編輯:關於PHP編程

ajax跨域往php程序post數據時,php程序總是執行兩次的解決方法,ajaxpost


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,我是之前為了省事,直接是默認選項(全部謂詞),所以才遇到了這個問題。 如圖:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved