透明的百葉窗價格-通風、調光、防光鋁百葉窗簾
窗簾、壁紙、地磚、地毯整體設計
隔音窗一通電話馬上服務!拆除工程專門
經驗老道處理迅速,親民價格高CP速洽

首頁  •  j2h 論壇 • 程式設計討論     • 

[JQuery] JQuery Ajax 在 Big5 頁面提送給 PHP 處

房東:牛奶糖
發表時間:2011-09-06


JQuery 在提送資料時使用的是 UTF-8 編碼 , 可是客戶要的網站又是 BIG5 編碼 , 真是頭痛死人了 , 再加上突然之間對於那 JSON (JavaScript Object Notation) 的資料傳送方式十分感興趣 , 就硬著頭皮下去衝了呀


首先遇到的問題就是要怎麼用 JSON 格式來 POST 表單 , 查了一下官方資料 , 先看方法 :


jQuery.post( url, [data], [callback], [type] )

嗯嗯 , 好像很簡單 , 試了一下 , 真的很容易調用 , 但....呀!! 怎麼沒有錯誤的處理 , 所以還是使用 JQuery.Ajax 的原型呼叫方法吧 .


jQuery.ajax( options )

再改一改 , 我想我需要的就始這些 option 就夠了吧


$.ajax({
type : "post" ,
url : post_url ,
data : post_str ,
dataType: "json" ,
success : function(data){},
error: function (XMLHttpRequest, textStatus, errorThrown){}
});

這時候開始抓出表單要提送的資料來餵給這隻程式看看 , 耶 , 不對呀 , 要提供JSON 格式的資料 , 所以就寫了一個專門轉資料的函數吧


function getJson_FormValue(form){
var str='';
var d_name,d_data;
 
$(this).find("input").each(
function(){
if($(this).val()!=''){
switch($(this).attr('type')){
case 'radio':
case 'checkbox':
if ($(this).attr('checked')){
d_name = $(this).attr('name');
d_data = ($(this).val());
if(str!='')
str+=',';
 
str+= ' ' + d_name +': ' + '"' + d_data+ '"';
}
break;
case 'select-one':
case 'text':
case 'password':
case 'hidden':
case 'textarea': d_name = $(this).attr('name');
d_data = ($(this).val());
if(str!='')
str+=',';
 
str+= d_name +' : ' + '"' + d_data+ '"';
break;
default:
break;
}
}
}
);
 
eval('str = {' + str + '};');
return str;
}

傳看看 , 暈 , 可怕的亂碼出現了 , 查一下資料 , UTF-8 編碼是 JQuery.Ajax 認得的編碼 , 沒辦法 , 山不轉路轉 , 只能在 php 那裡將資料轉回 BIG5 的編碼 .


//設定回傳的JSON
$json_array = array('action' => $action ,
'error' => true ,
'runobject' => '' ,
'msg' => '不允許操作',
'url' => '' );
 
//把接收的資料轉成 Big5
foreach($_POST as $key => $value)
$_POST[$key] = trim(iconv("utf-8","big5",$value));
 
$MemberID = $_POST["MemberID"];
$MemberPwd = $_POST["MemberPwd"];
 
//判斷登入
if(!($myMember_Login_Data = $myMember->check_member_login($MemberID,$MemberPwd))){
//回傳錯誤訊息
$json_array['error'] = true;
$json_array['msg'] = '登入的帳號密碼錯誤';
}else{
//回傳登入訊息
$json_array['error'] = false;
$json_array['msg'] = '歡迎您的登入';
$json_array['url'] = 'member.php';
 
//Session控制
$_SESSION["Web_Member_Login"] = "login";
$_SESSION["Web_Member_MemberID"] = $MemberID;
}
 
//轉成 UTF-8
$json_array['msg'] = iconv('big5','utf-8',$json_array['msg']);
 
//印出JSON資料
echo json_encode($json_array);
exit;

在 JQuery.Ajax 中的 Callback 函數處理


success : 
function(data){
//將 input 都取消鎖定
$(this).find("input").each(
function(){
$(this).attr("disabled","");
}
);
 
//處理傳回的資料
if(data.error == true){
alert(data.msg);
if(data.runobject != ''){
$(this).find("input[name='" + data.runobject + "']").focus();
if(data.runobject == 'authnum'){
//重新獲得一次驗證碼
}
}
return false;
}else{
//轉頁
alert(data.msg);
document.location.href = data.url;
return false;
}
 
}




  • 贊助網站       

    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務
    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!

  • 1 樓住戶:李小明
    發表時間:2014-01-16

    jQuery裡是可以選擇編碼的︰http://stackoverflow.com/questions/8285936/how-to-change-ajax-charset



     共 1 人回應  選擇頁數 【第1 頁】 

    姓名:
    佈告內容:
    其他選項: