標籤:
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,我是之前為了省事,直接是預設選項(全部謂詞),所以才遇到了這個問題。
ajax跨域往php程式post資料時,php程式總是執行兩次的解決方案