先感謝昨日有回答問題的所有大神們,很不好意思地還未回覆完
今日還請容許小的繼續發問
問題就是請幫我確認一下
下面這兩段code是不是有什麼問題我沒發現的
能否請大神多多指教
感激不盡
前端js
data = {
'data': datastring,
}
jsonobj = JSON.stringify(data);
$.ajax({
url: 'url',
method: 'POST',
data: {Data: data},
dataType: 'json',
success: function(result) {
if(result.insert === true){ // 這一行
alert(result.show);
}
else {
alert(result.show);
}
return;
},
});
後端php
$res = array();
$data = json_decode('Data');
// 中間驗證data
// PDO
$check = $stmt->execute(); // check為執行結果(bool)
if($check){
// 有中文時 沒中文會去掉urldecode
$res = array('show' => urldecode('成功'), 'insert' => true);
// true不是字串
}
else{
$res = array('show' => urldecode('error'), 'insert' => false);
// false不是字串
}
echo json_encode($response);
exit();
然後有一個一定要請問的重點
就是我設定 dataType: 'json'
正常(1)回來的資料是json物件吧??
(很抱歉地不敢確定,我不信任自己)
大致知道是因為我沒辦法用JSON.parse()
用了會報錯
JSON.parse():
https://blog.csdn.net/Time888/article/details/72357073
dataType:
https://matthung0807.blogspot.com/2018/02/jqueryajax-contenttypedatatype.html
因為剛剛被說不能寫這樣, 因為我回來是字串(到底回來的是什麼我也不敢保證了...)
success : function(result) {
if(result.insert === true){ // 這一行
alert(result.success);
}
else {
alert('error');
}
},
如果說
(1)if => 正常回來是JSON物件
請問是不是我後端寫得出問題所以回來變成純JSON字串??
還是有沒注意到的地方?
elseif => string 如果回來就是字串那能請問
不是用JSON.parse()
去轉obj嗎??
else => ?
還是其實回來的是其他東西??
然後如果不麻煩你
還希望進來的大神可以指正我應該要怎麼血會比較好
有問題有錯誤或者只是建議都沒關係
很抱歉我沒有想把工作丟給別人
但很抱歉我真的看不出來...也沒有可以參考的標準
還請各位大神幫忙
謝謝
改成dataType="text",
然後在Success裡console.log(result)看一下內容是否為標準json格式,一般來講大概都是[或{開頭,對稱結尾
另外,可以改用
$.post或 $.get取代底層的$.ajax
新版的jQuery 的ajax類的寫法也有改變,盡量用
$.post({
url: "./getdata.aspx",
data: { action : "getdata" },
dataType: "json"
})
.done(function (data) {
// todo 對data做處理,data已是json object
})
.fail(function (data) {
alert("查無此資訊");
});
用dataType: "text"時,你就可用javascript內建的JSON處理
.done(function(result){
if(IsJsonString(result)){
var arr_from_json = JSON.parse( result );
alert(arr_from_json["username"]);
}
});
function IsJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
大大你好
請問這樣算嗎??
有用urldecode()這樣中間是不是有問題??
console.log 跟 f12中Response{"mes":"\u529f\uff0c\u611f\u8b1d\u60a8\u7684\u767b\u8a18\u3002#BR\u62bdPS5\u8cfc","status":"true"}
但f12中Preview
卻是顯示中文字??
該看哪個為標準??
謝謝
在javascript世界裡 \u不用轉,會自行轉成相應的unicode文字,用JSON.parse就可以轉成jsonobject
josn 本質上就只是把一個結構化的資料,以特定格式寫出來的字串
所以 php 送出來的東西是字串沒錯,只是他的格式符合 json 規定的格式
在jquery 中設定 dataType: 'json'
,你可以想像是瀏覽器自動幫你用 JSON.parse
轉換過後才把資料給你。
所以當你設定這個選項時,不需要(也無法)再用 JSON.parse
來處理。
如果你想自己手動使用 JSON.parse
處理,可以設定 dataType: 'text'
直接拿原始字串。
總結一下:dataType: 'xxxx'
影響的只有瀏覽器本身在讀取資料時的動作,不影響伺服器端送來的資料。
關於 {"mes":"\u529f\uff0c\u611f\u8b1d\u60a8\u7684\u767b\u8a18\u3002#BR\u62bdPS5\u8cfc","status":"true"}
的問題。
這是伺服器原始送來的資料
經過 JSON.parse 後那些 unicode 會變成中文。
所以兩邊顯示的內容都是正確的。
PHP 預設會把非 ascii 字元用上面那種格式轉換。如果希望直接使用中文,可以設定第二個參數為 JSON_UNESCAPED_UNICODE
json_encode($arrayData, JSON_UNESCAPED_UNICODE);
不過這對 javascript 沒甚麼影響就是,都可以正常轉換。
(前提是使用 utf-8)
怎麼沒有人發現到最大的重點。
他變數給錯了。
程式寫法是對的。
提示:
你的 $response 在哪??是 $response 還是 $res