php的ajax請求
1. php如何判斷一個請求是否來源於本域並且是ajax請求
通過請求頭的Referer屬性可以獲取來源,X-Requested-With屬性(不代表ajax一定需要這個請求頭屬性)可以判斷是否是ajax。但是請求頭這種東西,也知道的,很容易偽造。如果僅僅是做業務上的判斷,請求頭就夠了。
2. php ajax請求,說提交的請求中存在不安全的值,請修改後重新提交
要設置form的提交方式,一般有兩種方式get和post默認的是get
<form name="form" method="post">
如果不填寫method的話,默認將以get方式提交。
你可以去後盾人平台看看,裡面的東西不錯
3. php非同步處理多個ajax請求的問題
jquery中的ajax有個async:false,設為這個屬性就可以同時調用php
默認是true:非同步,false:同步。
$.ajax({
type: "post",
url: "path",
cache:false,
async:false,
success: function(data){
}
});
4. 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();
});
5. 如何通過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秒的默認執行時間。
6. 求助一AJAX請求多介面案例PHP多線程怎麼寫
用一個介面去整合就行了,AJAX請求一個介面,在這個介面裡面把獲取到的數據提交到其他介面就行了
7. php 怎麼判斷是否ajax請求
思路:在你進行ajax請求的時候,設置一個文件頭信息的變數,在php端判斷這個信息是否存在以及是否等於自己設置的值,就可以知道是否是ajax請求了。
做法:js端發送頭信息
對象.setRequestHeader("變數名","變數值");
如 xmlHttp..setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest");
php端接受信息,注意此時接受的變數存在 $_SERVER['HTTP_變數名'];中,
如上面的例子則為$_SERVER['HTTP_X_REQUESTED_WITH'];
echo isset($_SERVER['HTTP_X_REQUESTED_WITH'])&&($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest')?'it is ajax':'it is not ajax';
注釋:js和jquery中有些許不同,自己注意一下,再者變數名字不要沖突了
附加:如果這是你自己的網站,你只是自己區別一下的話,這樣就可以了,但是,它是防止不了別人盜用你的ajax數據的,因為這些都是可以模擬的,一個好的方法是設計session驗證之類的。
8. php的ajax問題。非同步發送到伺服器的log.php頁面,請問log.php裡面還有其他與aja
樓主,你好,你的意思是,log.php這個頁面上代碼有很多,但你通過ajax只希望執行其中的一部分吧,那就很好辦了,直接ajax請求的時候GET傳一個action=li8的值,然後只需要在log.php的頁面判斷一下, 如果接收到GET["action"]=="li8"的話,就執行對ajax請求過來的代碼,反則就是其他代碼的執行,與ajax處理的代碼就用if區分開了!
9. php ajax請求超時怎麼解決
在ajax返回的錯誤中捕獲 error:function(e){
這里處理超時等錯誤的執行
}