⑴ thinkphp中怎麼實現跳轉到其他網站
5.15 重定向
Action類的redirect方法可以實現頁面的重定向功能。
redirect方法的參數用法和U函數的用法一致(參考上面的URL生成部分),例如:
上面的用法是停留5秒後跳轉到News模塊的category操作,並且顯示頁面跳轉中字樣,重定向後會改變當前的URL地址。
如果你僅僅是想重定向要一個指定的URL地址,而不是到某個模塊的操作方法,可以直接使用redirect方法重定向,例如:
Redirect方法的第一個參數是一個URL地址。
5.14 頁面跳轉
在應用開發中,經常會遇到一些帶有提示信息的跳轉頁面,例如操作成功或者操作錯誤頁面,並且自動跳轉到另外一個目標頁面。系統的Action類內置了兩個跳轉方法success和error,用於頁面跳轉提示,而且可以支持ajax提交。使用方法很簡單,舉例如下:
Success和error方法都有對應的模板,並且是可以設置的,默認的設置是兩個方法對應的模板都是:
模板文件可以使用模板標簽,並且可以使用下面的模板變數:
$msgTitle:操作標題
$message :頁面提示信息
$status :操作狀態 1表示成功 0 表示失敗 具體還可以由項目本身定義規則
$waitSecond :跳轉等待時間 單位為秒
$jumpUrl :跳轉頁面地址
success和error方法會自動判斷當前請求是否屬於Ajax請求,如果屬於Ajax請求則會調用ajaxReturn方法返回信息,具體可以參考後面的AJAX返回部分。
這些事thinkphp3.0手冊上有的,自己下載手冊看看
⑵ php判斷當前請求是post還是get
PHP 全局變數 -超全局變數- $_SERVER
判斷請求是GET:
$_SERVER['REQUEST_METHOD']=='GET'?true:false
判斷請求是POST:
$_SERVER['REQUEST_METHOD']=='POST'?true:false
另外判斷請求是AJAX:
((isset($_SERVER['HTTP_X_REQUESTED_WITH'])&&strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])=='xmlhttprequest')||!empty($_POST[C('VAR_AJAX_SUBMIT')])||!empty($_GET[C('VAR_AJAX_SUBMIT')]))?true:false
⑶ 如何通過php的curl模擬ajax請求,獲取其返回值
這個需要配合js,打開一個html頁面,首先js用ajax請求頁面,返回第一個頁面信息確定處理完畢(ajax有強制同步功能),ajax再訪問第二個頁面。(或者根據伺服器狀況,你可以同時提交幾個URL,跑幾個相同的頁面)
參數可以由js產生並傳遞url,php後台頁面根據URL抓頁面。然後ajax通過php,在資料庫或者是哪裡設一個標量,標明檢測到哪裡。由於前台的html頁面執行多少時候都沒問題,這樣php的內存限制和執行時間限制就解決了。
因為不會浪費大量的資源用一個頁面來跑一個瞬間500次的for循環了。(你的500次for循環死了原因可能是獲取的數據太多,大過了php限制的內存)
不過印象中curl好像也有強制同步的選項,就是等待一個抓取後再執行下一步。但是這個500次都是用一個頁面線程處理,也就是說肯定會遠遠大於30秒的默認執行時間。
⑷ thinkphp怎樣獲取ajax請求數據
一般將前台頁面搜索結果中,不喜歡的內容(鏈接),刪除掉,因為整個網站的編程框架式thinkphp,運用js中的ajax對頁面進行響應,調用後台php介面,實現前台和後台資料庫的同時更新.
首先我們需要做的就是在前台頁面中添加一個文本「刪除」,可以這么添加:
代碼如下:
<a href="javascript:void(0);" id= "<php>echo $val[id]</php>" class="delete" >刪除</a>
上面的html代碼的意思:就是給刪除添加一個href,這個href是個js函數,類似於超鏈接的作用,當然對於我這樣的新手在剛開始的時候會有疑惑,我們平時的超鏈接不是這樣的,網頁中很多的javascript:void(0),那程序怎麼知道用戶點擊刪除後,會響應其真正對應的js函數呢?別急,這就是為什麼會為刪除添加id以及class這樣的標簽,相信我把js中的代碼公布出來以後你就會明白了,代碼如下:
jQuery(".list a.delete").click(function(){
if(confirm("你確定要刪除嗎?")){
var _this=this;
var id = jQuery(_this).attr("id");
jQuery.ajax({
url : '/Search/index.php/Jason/delete?',
data : {'id':id},
dataType : 'json',
success : function(data){
var del = data.del;
if(del == 1){//刪除成功
jQuery("#"+id).parents(".list").remove();
}else{//刪除失敗
alert("刪除失敗");
}
}
});
}
});
大家看函數的頭部:jQuery(".list a.delete").click(),jQuery後面的標簽是很重要的,這就保證了jquery很准確的響應頁面中用戶點擊的「位置」,添加的事件為click(),在click里添加響應事件的代碼:var id = jQuery(_this).attr("id");獲取a對應的id,因為這個id是我們刪除資料庫時用到的鏈接id,當然這種直接明文的方式不好,在這里只是介紹整個響應過程。調用ajax,實現非同步的運行整個過程。我們設置了js接受的是json串,這里的方式應該有很多種吧,我沒有去嘗試,大家要是有興趣可以自行嘗試一下。/Search/index.php/Jason/delete?這句話就是js去請求php的介面,php介面對用的代碼如下:
注意ajax在求php介面時的路徑,也就是delete函數必須放在JasonAction.class.php中,此例子是必須這樣的:
代碼如下:
public function delete(){
if($this->isGet()){
$userId = session("uid");//用戶登錄
if(!empty($userId)){
$a = M('***');
$id = $this->_get('id');
$result=$a->where("id=$id")->delete();//刪除
if($result > 0){
$arr = array("del"=>'1');
}else{
$arr = array("del"=>'0');
}
$json_str = json_encode($arr);
echo $json_str;//返回給js
}
}
}
相信大家對上面的代碼不會陌生吧,整個過程都是thinkphp框架內部配置完畢的.
var del = data.del;這句是接受php代碼返回來的json串中del這個key的value,進而在前台進行頁面更新和響應.
復制代碼代碼如下:
if(del == 1){//刪除成功
jQuery("#"+id).parents(".list").remove();//這句話就是後台刪除成功後,直接在前台對響應的div進行刪除,這樣性能就會很快,無需進行後台數據的重新提取至前台頁面中,
}else{//刪除失敗
alert("刪除失敗");
}
整個響應的過程就是這樣,至於效果優化,是優化和細化方面的問題,後來,身邊的同事又告訴我前台移除響應鏈接的另一個動態效果:
即將:
代碼如下:
jQuery("#"+id).parents(".list").remove();
替換為:
代碼如下:
jQuery("#"+id).parents(".list").slideUp("slow", function(){
jQuery(this).remove();
});
⑸ PHP如何判斷是否為AJAX請求
<spanstyle="font-size:18px;">/**
*是否AJAX請求
*@accessprotected
*@returnbool
*/
protectedfunctionisAjax(){
if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
if('xmlhttprequest'==strtolower($_SERVER['HTTP_X_REQUESTED_WITH']))
returntrue;
}
if(!empty($_POST[C('VAR_AJAX_SUBMIT')])||!empty($_GET[C('VAR_AJAX_SUBMIT')]))
//判斷Ajax方式提交
returntrue;
returnfalse;
}</span>
⑹ thinkphp 驗證是不是ajax提交
有兩種方式,如下:
第一種方式:
PHP判斷ajax請求的原理:
在發送ajax請求的時候,我們可以通過XMLHttpRequest這個對象,創建自定義的header頭信息, 在jquery框架中,對於通過它的$.ajax, $.get, or $.post方法請求網頁內容時,它會向伺服器傳遞一個HTTP_X_REQUESTED_WITH的參數,php中就是在header一層判斷是否是ajax請求,對應的根據$_SERVER['HTTP_X_REQUESTED_WITH']判斷。
/**
* 當前請求是否ajax請求
*
* @access public
* @return bool
*/
function isAjax()
{
return isset($_SERVER['HTTP_X_REQUESTED_WITH']);
}
注意:
● 一般情況下$_SERVER['HTTP_X_REQUESTED_WITH']默認是XMLHttpRequest
● $_SERVER['HTTP_X_REQUESTED_WITH']也可以自定義創建的,使用XMLHttpRequest.setRequestHeader(name,value);參考文章:http://www.skygq.com/2011/01/04/php-check-request-from-ajax-or-normal/
第二種方式:
通過前台給php傳一個type參數來判斷,type=1則是ajax,否則是普通提交。
⑺ thinkphp使用header跳轉功能參數
thinkphp只是php一個框架了,但如果要實現頁面跳轉並不能使用header函數來實現了,下面小編來給大家介紹在thinkphp頁面跳轉方法總結吧。
通過這段時間thinkphp的應運,經常會遇到一些帶有提示信息的跳轉頁面,操作成功或者操作錯誤頁面,並且自動跳轉到另外一個目標頁面。系統的Action類內置了兩個跳轉方法success和error,用於頁面跳轉提示,而且可以支持ajax提交。
使用方法很簡單。
代碼如下 復制代碼
$User=M(『user』)//實例化user表
$res=$User->where(array(』name』=』lone』))->select //查詢name是lone
If($res){
$this->success(「輸出的提示信息」,」/User/list/」);
//查詢成功後跳轉的頁面第二個參數是模板路徑地址
}else{
$this->error(「輸出的錯誤信息」); //查詢失敗後返回上一頁
}
$this->redirect(「Index/list」); //直接跳轉,不帶計時後跳轉
這3中內置的跳轉都很好用,而且提高了網頁的效率!
Success和error方法都有對應的模板,並且是可以設置的,默認的設置是兩個方法對應的模板都是:
代碼如下 復制代碼
//默認錯誤跳轉對應的模板文件
'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
//默認成功跳轉對應的模板文件
'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
也可以使用項目內部的模板文件
代碼如下 復制代碼
//默認錯誤跳轉對應的模板文件
'TMPL_ACTION_ERROR' => 'Public:error';
//默認成功跳轉對應的模板文件
'TMPL_ACTION_SUCCESS' => 'Public:success';
模板文件可以使用模板標簽,並且可以使用下面的模板變數:
模板文件可以使用模板標簽,並且可以使用下面的模板變數:
jquery171008461078754635143="26">
$msgTitle 操作標題
$message 頁面提示信息
$status 操作狀態 1表示成功 0 表示失敗 具體還可以由項目本身定義規則
$waitSecond 跳轉等待時間 單位為秒
$jumpUrl 跳轉頁面地址 success和error方法會自動判斷當前請求是否屬於Ajax請求,如果屬於Ajax請求則會調用ajaxReturn方法返回信息,具體可以參考後面的AJAX返回部分。
⑻ Ajax向伺服器發送請求和接收返回的信息
Ajax向伺服器發送請求
Ajax對象創建完成後,下面就要講解一下Ajax如何使用。首先詳細講解一下Ajax向伺服器發送請求所需的兩個方法,具體如下:
(1)open()方法
open()方法用於創建一個新的HTTP請求,並指定此請求的類型(如GET、POST等)、URL以及驗證信息,其聲明方式如下所示:
在上述聲明中,method用於指定請求的類型,其值可為POST、GET、PUT及PROPFIND,大小寫不敏感;URL表示請求的地址,可以為絕對地址也可以為相對地址,並且可以傳遞查詢字元串。其餘參數為可選參數,其中,asyncFlagy用於指定請求方式,同步請求為false,默認為非同步請求true;userName用於指定用戶名,password用於指定密碼。
(2)send()方法
send()方法用於發送請求到HTTP伺服器並接收回應。其聲明方式如下所示:
在上述聲明中,content用於指定要發送的數據,其值可為DOM對象的實例、輸入流或字元串,一般與POST請求類型配合使用,需要注意的是,如果請求聲明為同步,該方法將會等待請求完成或者超時才會返回,否則此方法將立即返回。
需要注意的是,在使用GET方式傳遞特殊字元或中文參數時,要使用JavaScript中的encodeURIComponent()函數將其轉換成「%十六進制數」的形式,防止在某些瀏覽器(如IE瀏覽器)中中文亂碼的問題。
Ajax接收伺服器返回的信息
了解Ajax向伺服器發送請求後,下面將對Ajax如何接收伺服器返回的信息(例如,HTML標簽、CSS樣式、字元串、XML、JSON等),進行詳細講解。具體如下:
(1)readyState屬性
readyState屬性用於返回Ajax的當前狀態,狀態值有5種形式,具體如表所示。
(2)onreadystatechange屬性
onreadystatechange事件屬性用於感知readyState屬性狀態的改變。為了大家更好的理解這兩個屬性的使用,下面創建一個伺服器端的文件index.php,用於輸出字元串,然後在瀏覽器端index.html中向伺服器端發送請求,並在控制台輸出狀態值。具體示例如下所示:
創建伺服器端文件:index.php
創建瀏覽器端文件:index.html
在瀏覽器中訪問客戶端文件,按「F12」鍵,切換到控制台,查看輸出結果,具體如下圖所示。
從圖中可以看出,通過onreadystatechange事件屬性可以清晰的感知Ajax狀態的改變,同時使用readyState獲取轉變後的狀態值。例如Ajax從0(未初始化)狀態變成1(初始化)狀態值時,Ajax此時的狀態值為1。
(3)status屬性
status屬性用於返回當前請求的HTTP狀態碼,常見的狀態碼如表所示。
值得一提的是,在感知當前Ajax對象狀態時,為了追求程序的嚴謹性,需要同時判斷當前HTTP狀態status是否等於200(請求成功)。
需要注意的是,Ajax中的statusText屬性,僅當數據發送並接收完畢後,才可以獲取當前請求的響應狀態。
(4)獲取響應信息的相關屬性
當數據接收完畢且請求伺服器的請求成功時,即可以使用Ajax中提供的相關屬性獲取伺服器的響應信息。具體的屬性及相關說明如下表所示。
在上表中,responseText屬性用於返迴文本格式的響應數據;屬性responseBody表示直接從伺服器返回並未經解碼的二進制數據;responseXML屬性用於接收XML數據格式的響應數據。