iT邦幫忙

0

WordPress Rest API 總是回傳 XML 而不是 Json

  • 分享至 

  • xImage

各位大大好,我們通常使用 Nuxt3 + WordPress 前後端分離方式製作客製化專案,目前已執行 5~6 個這樣專案的架構,都沒有遇到任何問題,但最近不知道發生什麼事情,無從 Debug,完全找不到原因,WordPress 吐出的 Response 都是 XML 格式,而不是 Json,最後雖然我可以直接 JSON.parse or 重新裝一個 WordPress 暴力解,但我真的很好奇發生什麼事情了,花了兩天找不到原因,決定上來詢問。

以下我嘗試的幾個方法皆沒有用

  1. 我有嘗試在 Header 增加 Accept,但一樣沒有用,這裡附上 Nuxt3 SSR fetch 的方式 https://v3.nuxtjs.org/api/composables/use-async-data
const { data: pageData } = useAsyncData(
        'get_page_home',
        () => $fetch( config.apiBase + '/get_page_home', {
            method: 'POST',
            headers: {
                Accept: 'application/json'
            },
            params: {
                id: 52,
                locale: locale.value
            }
        }), {
            transform: (res) =>{ 
                return res.data.data
            }
        }
    )
  1. 在 php 端再轉一次
WP_REST_Response(json_encode($response_obj))) 
  1. 檢查 nginx 是不是有傳送問題,但設定檔案都跟以往一樣
  2. 換 php 版本
  3. 使用以往其他專案的 api 拿回來都沒問題,就這專案的 WordPress 有問題
  4. 由於 api endpoint 是另外寫的,我嘗試使用原生 wp-json/wp/v2 也一樣會變成 XML
  5. config.php debug 確認有開啟

我曾經有遇過 WordPress Error,回傳的資料就變成了 XML,但在 Postman 可以看到錯誤訊息,但此次狀況是完全看不到。

下圖為回傳的 Console 出來多了莫名的空格,所以我在懷疑是不是有哪邊有錯誤卻沒有吐出??
https://ithelp.ithome.com.tw/upload/images/20220914/20114904X6zVw4kne6.png

這裡可供測試的 api 網址,
懇請大大們協助提供我是否還有其他我可以嘗試看看的方向~真的非常感激!

http://test.e-s.tw/wp-json/wp/v2/pages/52

OMGGG!

我自己解了!真是吃了一個空格的大教訓啊!!!
我一直用 postman 嘗試,真的就是這個空白問題,但我尋找方的方向錯誤,一直在找到底有什麼地方吐錯卻沒顯示錯誤訊息。

最後我放棄找錯誤,開始搜尋關鍵字,為什麼 api 會有空白,
https://stackoverflow.com/questions/57372439/how-to-remove-blank-space-in-wordpress-json-api-response
根據這篇我慢慢移除掉主題裡面所有 ?> end close 的 tag,但還是沒解決,我就開始認真找所有設定檔案、主題檔案裡面是不是真的有空格,靠!還結果真的是!!!

最後竟然真的是因為真正的手殘空格空格空格!!!
因為回傳的前頭有了空格,所以 http 不會轉成 json....

不知道有沒有任何方法可以在 WordPress 最終端剔除掉所有的空格.....
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答