$data['status'] = 1; $data['content'] = 'content'; $this->ajaxReturn($data);
IS_GET 判斷是不是GET方式提交
IS_POST 判斷是不是POST方式提交
IS_PUT 判斷是不是PUT方式提交
IS_DELETE 判斷是不是DELETE方式提交
IS_AJAX 判斷是不是AJAX提交
REQUEST_METHOD 當前提交類型
class UserController extends Controller{ public function update(){ if (IS_POST){ $User = M('User'); $User->create(); $User->save(); $this->success('保存完成'); }else{ $this->error('非法請求'); } return 0; } }
1.3 跳轉和重定向:javascript
type (默認: 'GET') 類型: String 請求方式 ("POST" 或 "GET"), 默認爲 "GET"。注意:其它 HTTP 請求方法,如 PUT 和 DELETE 也可使用,但僅部分瀏覽器支持。 url (默認: 當前頁面地址) 類型: String 發送請求的地址。 async (默認: true)(1.8版本已棄用) 類型: Boolean 默認設置下,全部請求均爲異步請求(也就是說這是默認設置爲 true )。若是須要發送同步請求,請將此選項設置爲 false 。 data 類型: Object, String 發送到服務器的數據。將自動轉換爲請求字符串格式。GET 請求中將附加在 URL 後面。查看 processData 選項說明,以禁止此自動轉換。對象必須爲"{鍵:值}"格式。若是這個參數是一個數組,jQuery會按照traditional 參數的值, 將自動轉化爲一個同名的多值查詢字符串(查看下面的說明)。注:如 {foo:["bar1", "bar2"]} 轉換爲 '&foo=bar1&foo=bar2'。 dataType (默認: Intelligent Guess (xml, json, script, or html)) 類型: String 預期服務器返回的數據類型。若是不指定,jQuery 將自動根據 HTTP 包 MIME 信息來智能判斷,好比XML MIME類型就被識別爲XML。在1.4中,JSON就會生成一個JavaScript對象,而script則會執行這個腳本。隨後服務器端返回的數據會根據這個值解析後,傳遞給回調函數。舉例: "json": 把響應的結果看成 JSON 執行,並返回一個JavaScript對象。在 jQuery 1.4 中,JSON 格式的數據以嚴格的方式解析,若是格式有錯誤,jQuery都會被拒絕並拋出一個解析錯誤的異常。(見json.org的更多信息,正確的JSON格式。) error 類型: Function( jqXHR jqXHR, String textStatus, String errorThrown ) 請求失敗時調用此函數。有如下三個參數:jqXHR (在 jQuery 1.4.x前爲XMLHttpRequest) 對象、描述發生錯誤類型的一個字符串 和 捕獲的異常對象。若是發生了錯誤,錯誤信息(第二個參數)除了獲得null以外,還多是"timeout", "error", "abort" ,和 "parsererror"。 當一個HTTP錯誤發生時,errorThrown 接收HTTP狀態的文本部分,好比: "Not Found"(沒有找到) 或者 "Internal Server Error."(服務器內部錯誤)。 從jQuery 1.5開始, 在error設置能夠接受函數組成的數組。每一個函數將被依次調用。 注意:此處理程序在跨域腳本和JSONP形式的請求時不被調用。這是一個 Ajax Event。 success 類型: Function( Object data, String textStatus, jqXHR jqXHR ) 請求成功後的回調函數。這個函數傳遞3個參數:從服務器返回的數據,並根據dataType參數進行處理後的數據,一個描述狀態的字符串;還有 jqXHR(在jQuery 1.4.x前爲XMLHttpRequest) 對象 。在jQuery 1.5, 成功設置能夠接受一個函數數組。每一個函數將被依次調用。這是一個 Ajax Event 其餘jQuery-ajax-settings,詳見:http://www.jquery123.com/#jQuery-ajax-settings
舉例:php
var menuId = $("ul.nav").first().attr("id"); var request = $.ajax({ url: "script.php", type: "POST", data: {id : menuId}, dataType: "html" }); request.done(function(msg) { $("#log").html( msg ); }); request.fail(function(jqXHR, textStatus) { alert( "Request failed: " + textStatus ); });
注意:此處也能夠在ajax()中使用success和error參數判斷請求結果成功仍是失敗,並執行下一步操做。html
<script type="text/javascript"> var jsonStr = '[{"id":"01","open":false,"pId":"0","name":"A部門"},{"id":"01","open":false,"pId":"0","name":"A部門"},{"id":"011","open":false,"pId":"01","name":"A部門"},{"id":"03","open":false,"pId":"0","name":"A部門"},{"id":"04","open":false,"pId":"0","name":"A部門"}, {"id":"05","open":false,"pId":"0","name":"A部門"}, {"id":"06","open":false,"pId":"0","name":"A部門"}]'; // var jsonObj = $.parseJSON(jsonStr); var jsonObj = JSON.parse(jsonStr) console.log(jsonObj) var jsonStr1 = JSON.stringify(jsonObj) console.log(jsonStr1+"jsonStr1") var jsonArr = []; for(var i =0 ;i < jsonObj.length;i++){ jsonArr[i] = jsonObj[i]; } console.log(typeof(jsonArr)) </script>
想要將表單數據提交到後臺,須要先從表單獲取數據/數據集:java
function change_serialize_to_json(serialize_objective_array) { var temp_json_object = {}; $.each(serialize_objective_array, function () { temp_json_object[this.name] = this.value; }); return temp_json_object; }
輸出:{"input1":"","textarea":"234","select":"1"}jquery
eval("(" + status_process+ ")");
// jquery的方法 var jsonObj = $.parseJSON(jsonStr) //js 的方法 var jsonObj = JSON.parse(jsonStr)
//js方法 var jsonStr1 = JSON.stringify(jsonObj)
//value賦值爲off是由於正常的serializeArray()獲取到的勾選的checkbox值爲on。 $.fn.my_serialize_array = function () { var my_serialize_array = this.serializeArray();//官方函數只包含勾選的checkbox,而且值默認爲on var not_checked_object = $('input[type=checkbox]:not(:checked)', this);//this指調用這個函數的form $.each(not_checked_object, function () { if (!my_serialize_array.hasOwnProperty(this.name)) {//this指沒選中的一個object my_serialize_array.push({name: this.name, value: "off"}); } }); console.log(my_serialize_array); return my_serialize_array; };
//一、php中的form表單 <div class="modal fade hide" id="add_engineer_modal" tabindex="-1" role="dialog"> ...... <form id="add_engineer_modal_form" class="form-horizontal"> <fieldset> ...... <button type="button" class="btn btn-primary" id="add_engineer_modal_submit" onclick="add_engineer_modal_submit()" >提交更改</button> ...... </fieldset> </form> </div>
//二、js校驗表單併發起ajax function add_engineer_modal_check_value() { //以edit_modal_check_value()爲模板 var serialize_array_object = $("#add_engineer_modal_form").mySerializeArray();//針對checkbox優化的SerializeArray var data = change_serialize_to_json(serialize_array_object); var check_results = []; check_results['result'] = [];//保存錯誤信息 check_results['data'] = data;//保存input和select對象 //check_employee_number是自定義判斷員工號函數。 if (check_employee_number(data['employee_number']) == false) { check_results['result'].push("請輸入有效的員工號(可選)"); } return check_results; } function add_engineer_modal_submit() { var check_results = add_engineer_modal_check_value(); if (check_results['result'].length == 0) { //注意,是否要轉換上面的data,要取決於你想要用什麼類型傳輸,用js對象傳輸更好,不須要stringify,也方便控制器處理。個人舊代碼有些累贅了。 var json_data = JSON.stringify(check_results['data']); //JSON.stringify() 方法將一個JavaScript值轉換爲一個JSON字符串(ajax要求json對象或json字符串才能傳輸) $.ajax({ type: 'POST', url: add_engineer_url, //在php中全局定義url,方便使用thinkphp的U方法 data: {"json_data": json_data}, //ajax要求json對象或json字符串才能傳輸,json_data只是json字符串而已。若是上面用js對象傳輸,這裏就寫成"data:json_data," dataType: "json", success: function (data) { console.log("數據交互成功"); }, error: function (data) { console.log("數據交互失敗"); } }); } else { //彈出錯誤提示alert } return 0; }
public function add_engineer() { if (IS_AJAX) { $posted_json_data = I('post.json_data'); $posted_json_data_replace = str_replace('"', '"', $posted_json_data);//慎用str_replace,若是非要用最好在轉成數組以後,針對特定的item替換。舊代碼這樣寫不太好。 $posted_json_data_replace_array = (Array)json_decode($posted_json_data_replace);//通常不須要強制Array,json_decode的返回值就是Array,此處我是爲了防止本身的serializeArray產生了特殊值影響到這裏。最好還要有一些過濾函數過濾掉script、html元素等 //處理數據庫事務寫入,經過判斷寫入結果來區分ajaxReturn的結果 //能夠將全部想要返回的數據放在一個數組中,好比新增的行id、插入數據庫的操做是否成功 //若是操做數據庫成功就返回以下結果。 $user_table->commit();//省略事務等操做 $data['result'] = true; $data['pk_user_id'] = $data_add_user_result; $this->ajaxReturn($data);//省略條件判斷,建議對正反條件都返回數組,好比$data['alert']記錄返回結果true仍是false,若是是true,就把$data['result']=$result,返回$data。 } return 0; }
success: function (data) { if (data['result'] == false) { alert(data['alert']); } else { $('#add_engineer_modal').modal('hide'); $('#user_list_table tr').eq(0).after('<tr></tr>'); //這裏就可使用data['pk_user_id']了。 $('#user_list_table tr').eq(1).append('<td>'+data['pk_user_id']+'</td>'); } },