開(kāi)發(fā)背景:
在開(kāi)發(fā)中采用了一個(gè)新的架構(gòu),將大部分客戶的留言功能集成到一個(gè)公共API提交保存,采用不同的用戶名區(qū)分,供客戶查詢自己網(wǎng)站的留言,這樣節(jié)約了客戶網(wǎng)站的資源,也提升了維護(hù)性。
那么在提交時(shí)不能采用直接的post提交,否則會(huì)產(chǎn)生跳轉(zhuǎn),使訪客混亂,所以采用ajax提交留言內(nèi)容至公共服務(wù)器:http://wx.igooda.cn/index.php/messagesave,但嘗試后發(fā)現(xiàn)不能提交post請(qǐng)求,百度后查詢結(jié)果是跨域只能是get請(qǐng)求,這對(duì)留言內(nèi)容多的來(lái)說(shuō),是不可行的。還有一種解決方案是采用jsonp請(qǐng)求,原理是在頁(yè)面中建立一個(gè)script腳本,導(dǎo)入外部腳本,再將外部腳本轉(zhuǎn)換為結(jié)果反饋,這樣的方法也不能夠很好的解決。
開(kāi)發(fā)思路:
雖然javascript的跨域有限制,但php可以跨域提交post請(qǐng)求,所以在網(wǎng)站內(nèi)建立一個(gè)api,做為post的中轉(zhuǎn)站,在提交給遠(yuǎn)程服務(wù)器,這樣就可以完成跨域post請(qǐng)求。
開(kāi)發(fā)步驟:
1、修改表單
將form的action指向網(wǎng)站內(nèi)的 api.php,建立一個(gè)隱藏字段:
<input type="hidden" name="request_url" value="跨域的api地址">
2、建立企業(yè)網(wǎng)站內(nèi)的 api.php
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;
3、ajax提交請(qǐng)求吧!相關(guān)的javascript代碼請(qǐng)查看下面的案例里的源代碼。
演示地址:
這個(gè)客戶的網(wǎng)站就是采用了這樣的機(jī)制,前端代碼可以通過(guò)查看源碼找到。
另:這個(gè)客戶網(wǎng)站新增了一個(gè)功能,就是通過(guò)在線留言后,后臺(tái)自動(dòng)通過(guò)企業(yè)的微信公眾平臺(tái)給企業(yè)的客戶發(fā)送一條微信提醒,十分方便。
哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無(wú)需額外費(fèi)用,即可穩(wěn)步提升排名至首頁(yè)。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。
