妥善的ajax跨域提交post請求的解決方案,結合PHP與jquery

開發背景:

在開發中採用了一個新的架構,將大部分客戶的留言功能集成到一個公共API提交保存,採用不一樣的用戶名區分,供客戶查詢本身網站的留言,這樣節約了客戶網站的資源,也提高了維護性。 javascript

那麼在提交時不能採用直接的post提交,不然會產生跳轉,使訪客混亂,因此採用ajax提交留言內容至公共服務器:http://wx.igooda.cn/index.php/messagesave,但嘗試後發現不能提交post請求,百度後查詢結果是跨域只能是get請求,這對留言內容多的來講,是不可行的。還有一種解決方案是採用jsonp請求,原理是在頁面中創建一個script腳本,導入外部腳本,再將外部腳本轉換爲結果反饋,這樣的方法也不可以很好的解決。 php

開發思路:

雖然javascript的跨域有限制,但php能夠跨域提交post請求,因此在網站內創建一個api,作爲post的中轉站,在提交給遠程服務器,這樣就能夠完成跨域post請求。 html

開發步驟:

一、修改表單 前端

將form的action指向網站內的 api.php,創建一個隱藏字段: java

<input type="hidden" name="request_url" value="跨域的api地址">


二、創建企業網站內的 api.php ajax

function Post($url, $post = null) {
    if (is_array($post)) {
        ksort($post);
        $content = http_build_query($post);
        $content_length = strlen($content);
        $options = array(
            'http' => array(
                'method' => 'POST',
                'header' =>
                "Content-type: application/x-www-form-urlencoded\r\n" .
                "Content-length: $content_length\r\n",
                'content' => $content
            )
        );
        return file_get_contents($url, false, stream_context_create($options));
    }
}

$request_url = $_POST['request_url'];

$response = Post($request_url , $_POST);

echo $response;
三、ajax提交請求吧!相關的javascript代碼請查看下面的案例裏的源代碼。


演示地址:

http://www.hrbzljr.com/ json

這個客戶的網站就是採用了這樣的機制,前端代碼能夠經過查看源碼找到。 api

另:這個客戶網站新增了一個功能,就是經過在線留言後,後臺自動經過企業的微信公衆平臺給企業的客戶發送一條微信提醒,十分方便。

相關文章
相關標籤/搜索