專業設計師團隊,賦予空間新美感
裝潢設計搭配量身訂做系統家具
壁紙跳蚤防治專業團隊服務,消滅跳蚤蟲卵蛹
徹底消滅跳蚤,免費諮詢服務

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

[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 頁】 

    姓名:
    佈告內容: