وردپرس، ویرایشگر بلوکی و خطای Invalid JSON response

موقع کار با ویرایشگر بلوکی وردپرس گاهی اوقات خطایی با عنوان Not a Valid JSON Response بروز پیدا می‌کند. معنی این خطا در همان دو کلمه Response و JSON نهفته است. یعنی چی؟

The response is not a valid JSON response
The response is not a valid JSON response

داستان از این قرارست که وردپرس اساسا هنگام ویرایش پست نیاز به برقراری ارتباط با سرور دارد و در پس‌زمینه از سرور پاسخ می‌گیرد. این پاسخ (Response) معمولا در فرمت JSON است و از این فرمت هم برای انتقال سریع داده‌ها به وسیله جاوا اسکریپت استفاده می‌شود. در نتیجه معنی این پیام خطا آنست که وردپرس به هر علت نتوانسته پاسخ مدنظر را در فرمت JSON از سرور دریافت کند. مساله پس کشف این علت است.

JSON response error
JSON response error

این مشکل به هزار و یک دلیل می‌تواند اتفاق بیفتد. بنابراین برای مشکل‌زدایی باید راه‌های مختلفی را امتحان کرد.

تنظیمات URL

حالت اول که خیلی به ندرت پیش می‌آید اینست که به هر دلیل نشانی وردپرس و نشانی سایت یکسان نباشند. بنابراین باید از قسمت تنظیمات به بخش عمومی رفت و برای اطمینان بررسی کرد که این دو آدرس حتما یکی باشند و هر دو با https شروع شوند (البته در صورت استفاده از گواهی SSL).

نشانی وردپرس و نشانی سایت
نشانی وردپرس و نشانی سایت

مشکل پروتکل https

این روزها اکثر وب‌سایت‌ها از پروتکل https استفاده می‌کنند. اما گاهی پیش می‌آید که محتوای https و http با هم قاطی شوند (اصطلاحا Mixed Content)؛ یعنی علیرغم استفاده از https، منابعی در سایت وجود دارند که همچنان با پروتکل http لود می‌شوند و این می‌تواند باعث خطای Invalid JSON بشود. پس باید اطمینان حاصل کرد که تمام درخواست‌های http به https هدایت می‌شوند. برای این کار می‌توان از افزونه Really Simple SSL استفاده کرد.

ساختار پیوندهای یکتا

مرحله بعدی در صورت تداوم مشکل اینست که از قسمت تنظیمات -> پیوندهای یکتا، یک بار ساختار پیوند را موقتا تغییر دهیم (مثلا به حالت پیش‌فرض) تا شاید خطا رفع شود و بعد مجددا به ساختار قبلی بازگردانیم.

ساختار پیوندهای یکتا (permalinks)
ساختار پیوندهای یکتا (permalinks)

آپلود و اصلاح نام فایل‌ها در کتابخانه

خطای Invalid JSON بعضا مواقعی رخ می‌دهد که می‌خواهیم یک فایل مثل عکس را از طریق ویرایشگر بلوکی به پست اضافه کنیم. اما بهتر است که فایل به طور مستقیم در کتابخانه آپلود شود. ضمنا ممکن است مشکل از اینجا باشد که در نام فایل از کاراکترهایی مثل & یا $ و غیره استفاده شده. پس برای اطمینان نام فایل موردنظر در کتابخانه را هم باید با حذف چنین کاراکترهایی اصلاح کرد.

بروزرسانی htaccess

با تغییر ساختار پیوندهای یکتا در مرحله قبل، وردپرس طبیعتا باید فایل htaccess را بروزرسانی و تازه کند. اما گاهی این اتفاق نمی‌افتد و باید به صورت دستی نسخه تازه این فایل را جایگزین قبلی کرد. برای اینکار باید از کنترل پنل فایل htaccess را در روت سایت (public_html) پیدا و کدهای زیر را جایگزین کدهای موجود در آن کرد:

# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

اگر همچنان خطا پابرجا ماند، باید مراحل بعدی را طی کرد.

بررسی لاگ دی‌باگِ Rest API

خطای Invalid JSON می‌تواند به دلیل وجود مشکل در REST API باشد. Rest API در واقع مجموعه تکنیک‌هایی است که وردپرس موقع کار کردن شما روی وب‌سایت برای برقراری ارتباط با سرور استفاده می‌کند. در نتیجه از قسمت تنظیمات باید به بخش سلامت سایت رفت و بررسی کرد که آیا خطایی در این بخش وجود دارد یا نه.

بررسی خطای REST API
بررسی خطای REST API

راه دیگر اینست که از Dev Tools در مرورگر وارد تب Networks شویم و با انتخاب FETCH/XHR تمام Ajax Call ها را فیلتر و مشکلات احتمالی REST API را پیدا کنیم.

بررسی مشکلات REST API
بررسی مشکلات REST API

بررسی خطاهای کنسول

از Dev Tools مرورگر می‌توان با انتخاب تب Console خطاهای موجود در صفحه ویرایشگر بلوکی را دید تا از آن به سرنخ‌هایی برای حل مشکل رسید. منتها این روش هم مثل قبل به قدری دانش فنی نیاز دارد.

فعال‌سازی ابزار Debug

وردپرس قابلیتی را برای بررسی لاگ خطاها درنظر گرفته که به طور پیش‌فرض فعال نیست (نگاه کنید به این مطلب). برای فعال‌سازی این قابلیت باید خیلی ساده از فایل wp-config عبارت WP_DEBUG را بیابیم و مقدارش را از false به true تغییر دهیم و نهایتا دو خط زیر را هم به آن اضافه کنیم:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );

با این تغییر الان در فولدر wp_content فایلی به نام debug.log ظاهر می‌شود که با بررسی‌اش چه بسا بتوان سرنخی از خطای Invalid JSON به دست آورد.

debug.logیل
debug.logیل

قطع موقت فایروال سایت

خطای JSON گاهی به خاطر استفاده از افزونه‌های فایروال (مثل Sucuri، Cloudflare و غیره) رخ می‌دهد. چون فایروال بعضا ممکن است request یا درخواست‌های بلامشکل را هم مسدود کند. پس اگر افزونه فایروال استفاده می‌شود می‌توان به طور موقت آن را غیرفعال کرد و اگر فایروال در سطح DNS تنظیم شده (مثل کلاوفلر) از بخش تنظیمات حساب کاربری غیرفعالش کرد.

غیرفعال‌سازی افزونه‌ها

خطای Invalis JSON در خیلی موارد به خاطر تداخل افزونه‌ها رخ می‌دهد، بنابراین باید افزونه‌ها را غیرفعال و یک به یک فعال کرد تا نهایتا به افزونه‌ای رسید که با فعال‌سازی‌اش سر و کله خطا مجددا پیدا می‌شود. آن موقع می‌توان فهمید که مشکل از کدام افزونه آب می‌خورد.

برای غیرفعال‌سازی یکجا و سریع افزونه‌ها دو راه وجود دارد:

اول اینکه از کنترل پنل فولدر پلاگین‌ها را تغییر نام دهیم و بعد دوباره به نام اصلی بازگردانیم.

راه دوم اینست که از phpmyadmin، دیتابیس خود را انتخاب کنیم و سپس با انتخاب جدول wp_options، ردیف active_plugins را بیابیم. بعد با ویرایش این ردیف، هرآنچه را در قسمت option value نوشته شده پاک و ذخیره کنیم.

 غیرفعال‌سازی افزونه‌ها از phpmyadmin
غیرفعال‌سازی افزونه‌ها از phpmyadmin

بازگشت موقت به ویرایشگر کلاسیک

اگر هیچ‌کدام از این روش‌های بالا جواب نداد، باید موقتا سراغ دریافت و نصب ویرایشگر کلاسیک وردپرس رفت. چون نسخه قدیمی ویرایشگر وردپرس برخلاف ویرایشگر بلوکی برای دریافت پاسخ‌های JSON اتکای خیلی زیادی به REST API ندارد. ولی باید در نظر داشت این یک راهکار موقت و آخرین گزینه از سر ناچاری است.