iT邦幫忙

0

還請幫忙指出這段jQ $.ajax與對應後端哪裡有問題??

  • 分享至 

  • xImage

先感謝昨日有回答問題的所有大神們,很不好意思地還未回覆完
今日還請容許小的繼續發問
問題就是請幫我確認一下
下面這兩段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 => ?
還是其實回來的是其他東西??

然後如果不麻煩你
還希望進來的大神可以指正我應該要怎麼血會比較好
有問題有錯誤或者只是建議都沒關係

很抱歉我沒有想把工作丟給別人
但很抱歉我真的看不出來...也沒有可以參考的標準
還請各位大神幫忙
謝謝

看更多先前的討論...收起先前的討論...
標題就先錯了

是$.ajax不是$.axaj

SNSV 4ni ? 哈,開玩笑,等下吃飽慢慢看
ccutmis iT邦高手 2 級 ‧ 2020-11-18 12:00:18 檢舉
一點小建議,像: alert(result.success); 這種比較建議改寫成 console.log(result.success);
然後按F12在console面板裡觀察結果
japhenchen

謝謝 已改了
ccutmis
你好,謝謝你的建議
是不是最好這樣做??

if(result.insert === 'true'){
console.log(result.success); // 確定編碼
console.log(typeof(result.success)); // 確定是string
var message = result.success
alert(message);
}
else {
alert('error');
}

謝謝教導
ch_lute iT邦新手 5 級 ‧ 2020-11-18 17:25:28 檢舉
你是要傳data: {Data: data}還是data: jsonobj 還是 data: {Data: jsonobj } ?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
japhenchen
iT邦超人 1 級 ‧ 2020-11-18 11:52:03
最佳解答

改成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

1
淺水員
iT邦大師 6 級 ‧ 2020-11-18 14:59:32

josn 本質上就只是把一個結構化的資料,以特定格式寫出來的字串
所以 php 送出來的東西是字串沒錯,只是他的格式符合 json 規定的格式

在jquery 中設定 dataType: 'json',你可以想像是瀏覽器自動幫你用 JSON.parse 轉換過後才把資料給你。
所以當你設定這個選項時,不需要(也無法)再用 JSON.parse 來處理。

如果你想自己手動使用 JSON.parse 處理,可以設定 dataType: 'text' 直接拿原始字串。

總結一下:dataType: 'xxxx' 影響的只有瀏覽器本身在讀取資料時的動作,不影響伺服器端送來的資料。

淺水員 iT邦大師 6 級 ‧ 2020-11-18 15:11:03 檢舉

關於 {"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)

3

怎麼沒有人發現到最大的重點。
他變數給錯了。

程式寫法是對的。

提示:
你的 $response 在哪??是 $response 還是 $res

我要發表回答

立即登入回答