روزها درگیر مصائب فنی، شبها مشغول ثبت راهحلهای یافتنی
وردپرس، ویرایشگر بلوکی و خطای Invalid JSON response

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

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

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

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

آپلود و اصلاح نام فایلها در کتابخانه
خطای 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 در واقع مجموعه تکنیکهایی است که وردپرس موقع کار کردن شما روی وبسایت برای برقراری ارتباط با سرور استفاده میکند. در نتیجه از قسمت تنظیمات باید به بخش سلامت سایت رفت و بررسی کرد که آیا خطایی در این بخش وجود دارد یا نه.

راه دیگر اینست که از Dev Tools در مرورگر وارد تب Networks شویم و با انتخاب FETCH/XHR تمام Ajax Call ها را فیلتر و مشکلات احتمالی 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 به دست آورد.

قطع موقت فایروال سایت
خطای JSON گاهی به خاطر استفاده از افزونههای فایروال (مثل Sucuri، Cloudflare و غیره) رخ میدهد. چون فایروال بعضا ممکن است request یا درخواستهای بلامشکل را هم مسدود کند. پس اگر افزونه فایروال استفاده میشود میتوان به طور موقت آن را غیرفعال کرد و اگر فایروال در سطح DNS تنظیم شده (مثل کلاوفلر) از بخش تنظیمات حساب کاربری غیرفعالش کرد.
غیرفعالسازی افزونهها
خطای Invalis JSON در خیلی موارد به خاطر تداخل افزونهها رخ میدهد، بنابراین باید افزونهها را غیرفعال و یک به یک فعال کرد تا نهایتا به افزونهای رسید که با فعالسازیاش سر و کله خطا مجددا پیدا میشود. آن موقع میتوان فهمید که مشکل از کدام افزونه آب میخورد.
برای غیرفعالسازی یکجا و سریع افزونهها دو راه وجود دارد:
اول اینکه از کنترل پنل فولدر پلاگینها را تغییر نام دهیم و بعد دوباره به نام اصلی بازگردانیم.
راه دوم اینست که از phpmyadmin، دیتابیس خود را انتخاب کنیم و سپس با انتخاب جدول wp_options، ردیف active_plugins را بیابیم. بعد با ویرایش این ردیف، هرآنچه را در قسمت option value نوشته شده پاک و ذخیره کنیم.

بازگشت موقت به ویرایشگر کلاسیک
اگر هیچکدام از این روشهای بالا جواب نداد، باید موقتا سراغ دریافت و نصب ویرایشگر کلاسیک وردپرس رفت. چون نسخه قدیمی ویرایشگر وردپرس برخلاف ویرایشگر بلوکی برای دریافت پاسخهای JSON اتکای خیلی زیادی به REST API ندارد. ولی باید در نظر داشت این یک راهکار موقت و آخرین گزینه از سر ناچاری است.
مطلبی دیگر از این نویسنده
تراز افقی و عمودی المانهای صفحه با CSS: چطور عذاب نکشیم؟
مطلبی دیگر در همین موضوع
برترین فریم ورک ها برای توسعه دهندگان PHP
مطلبی دیگر در همین موضوع
بکاپ گیری از Etcd و قرار دادن بر روی فضای ابری ابر آروان