AJAX පෝරමය JSON අපේක්ෂා කරන නමුත් HTML ලැබේ: ප්රතිචාරය පියවරෙන් පියවර පරීක්ෂා කරන්න
200 තත්ත්වය JSON බවට සාක්ෂියක් නොවේ. ජාල පැනලය පියවරෙන් පියවර බලා ප්රවාහන, නිරූපණ සහ ගිවිසුම් අසාර්ථකතා වෙන් කරන්න.
පෝරමය යවනු ලැබේ, කරකැවෙන ලකුණ පෙනේ, සහ JSON තුළ 0 ස්ථානයේ අනපේක්ෂිත < ලකුණක් ඇතැයි කොන්සෝලය පවසයි. පිටුවම හොඳින් පූරණය වේ, එබැවින් පළමු නැඹුරුව විග්රහකය හෝ උමං මාර්ගයට දොස් පැවරීමයි. සාමාන්යයෙන් දෙකෙන් කිසිවක් සම්බන්ධ නොවේ: යැවීම පිටුව පූරණය කිරීමට වඩා වෙනස් ඉල්ලීමකි, සහ එය JSON නොවන දෙයක් සමඟ නැවත පැමිණියේය. බ්රවුසරය සැබවින්ම හෙළිදරව් කරන අනුපිළිවෙලින් වැඩ කරන්න, මන්ද හැකි පිළිතුරු හතරකට වෙනස් නිවැරදි කිරීම් හතරක් අවශ්ය වේ.
පියවර 1: සැබවින්ම සිදු වූ යැවීම අල්ලා ගන්න
යැවීමට පෙර ජාල පැනලය විවෘත කරන්න, සංචාලන අතර ඇතුළත් කිරීම් රඳවා ගැනීමට ලොගය සකසන්න, පසුව භාවිතයට අවසර ඇති ගිණුමක එක් හානිකර නොවන පරීක්ෂණ යැවීමක් කරන්න. පිටුවේ ලේඛන ඉල්ලීම නොව, පෝරමයම ආරම්භ කළ ඉල්ලීම තෝරන්න.
පෙරහන් සමඟ ප්රවේශම් වන්න. XHR හෝ Fetch පෙරහන පහසුය, නමුත් රාමුව තවමත් සැඟවුණු iframe හෝ ගතිකව සාදන ලද පෝරමයක් හරහා යවන්නේ නම්, පෙරහන එකම වැදගත් ඉල්ලීම සඟවනු ඇත. පළමුව පෙරහනක් නොමැතිව එක් වරක් යවා එයට ආ දෙය බලන්න.
තෝරාගත් ඉල්ලීම සඳහා ඕනෑම අර්ථකථනයකට පෙර කරුණු හයක් ලියන්න: ක්රමය, විමසුම් තන්තුව සමඟ සම්පූර්ණ URL, තත්ත්වය, යළි හරවන දාමය, ප්රතිචාරයේ Content-Type, සහ පණිවුඩයේ පළමු පේළි. Chrome DevTools හි ජාල පැනල යොමුව මේවා ඇති Headers, Response සහ Initiator දර්ශන ආවරණය කරයි, සහ වෙනත් බ්රවුසරවල සමාන පැනල ද එම ක්ෂේත්ර පෙන්වයි.
පියවර 2: එය ඔබ සිතන ඉල්ලීම බව තහවුරු කරන්න
පුදුම සහගත ලෙස බොහෝ JSON දෝෂ ඇත්ත වශයෙන්ම මාර්ගගත කිරීමේ දෝෂ වේ. යැවීමේ හසුරුවනය preventDefault ඇමතීමට පෙර ව්යතිරේකයක් විසි කරන්නේ නම්, බ්රවුසරය action ගුණාංගයේ සඳහන් ලිපිනයට ස්වදේශීය පෝරම POST කරයි, සහ සේවාදායකය සම්පූර්ණ HTML පිටුවකින් පිළිතුරු දෙයි. හසුරුවනය කිසි විටෙක ක්රියාත්මක නොවේ, එබැවින් JSON කිසි විටෙක ඉල්ලා නැත.
පැනලයේ URL ඔබේ JavaScript ඇමතන URL සමඟ සසඳන්න. වෙනත් තැනක අවසන් වන යළි හැරවීමක්, නැති හෝ අතිරික්ත අවසන් ස්ලැෂ් එකක්, ක්රමයේ නොගැලපීමක්, හෝ ගෙන ගිය පිටුවකින් සාපේක්ෂ මාර්ගයකට යවන පෝරමයක් සොයන්න. යළි හැරවීම් දාමය අවසානය දක්වා අනුගමනය කර පළමු නොව අවසාන URL සටහන් කරන්න.
පසුව ආරම්භකයා පරීක්ෂා කරන්න. ඉල්ලීම ඔබේ ස්ක්රිප්ටයෙන් නොව ලේඛන සංචාලනයෙන් පැමිණියේ නම්, ගැටලුව දැනටමත් සොයාගෙන ඇත, සහ ප්රතිචාර විග්රහකයේ කිසිදු වෙනසක් උදව් නොකරනු ඇත.
පියවර 3: ප්රතිඵලය කාණ්ඩ හතරකට බෙදන්න
සෑම ප්රතිඵලයක්ම මේවායින් හරියටම එකකට අයත් වේ, සහ කාණ්ඩය ඊළඟට කොහේ බලන්නේද යන්න තීරණය කරයි.
| What you see | Category | Where to look |
|---|---|---|
| Request never finishes, TLS or connection error | No usable response | Endpoint reachability, certificate, front-end timeout |
| Request completes, script gets an opaque failure | Access blocked | Cross-origin policy, credentials mode, missing response header |
| 200 with an HTML body or a login form | Wrong representation | Redirect, expired session, route fallback, error handler |
| Body begins with a notice then valid JSON | Wrong representation | Server-side warning output before serialisation |
| Valid JSON, framework rejects it | Contract mismatch | Envelope shape, field names, value types |
මැද පේළි මිනිසුන් වැරදි ලෙස රෝග විනිශ්චය කරන ඒවාය, මන්ද තත්ත්වය 200 වේ. යළි හැරවීමකින් පසු ළඟා වන පිවිසුම් පිටුව සම්පූර්ණයෙන්ම හොඳ HTTP ප්රතිචාරයක් සහ ඉතා නරක JSON ලේඛනයකි. application/json අන්තර්ගත වර්ගය එය නොසකසයි: එය ලේබලයක් පමණක් වන අතර වැරදි ලෙස ලේබල් කළ පණිවුඩය තවමත් විග්රහ කළ නොහැක. ප්රවේශය අවහිර කර ඇත යනු සම්පූර්ණ ඉල්ලීමක් ලෙස පෙනෙන පේළියයි: පැනලය තත්ත්වය පෙන්වයි, නමුත් හරස් මූල නීතිය පණිවුඩය රඳවා ගනී, එබැවින් ඇමතන ස්ක්රිප්ටයට එය කාල සීමාවක් තරම්ම නිෂ්ඵලය.
හතරවන පේළිය පැරණි PHP සහ රාමු තට්ටු මත ද එසේම සාමාන්යය. කේතනය කළ බරට පෙර මුද්රණය වන කල් ඉකුත් වීමේ අනතුරු ඇඟවීම කිසිදු JSON විග්රහකයක් නොපිළිගන්නා පණිවුඩයක් සාදයි, සහ බොහෝ විට එම අනතුරු ඇඟවීමම සම්පූර්ණ පැහැදිලි කිරීමයි.
පියවර 4: විග්රහක දෝෂය වචනාර්ථයෙන් කියන්න
දෝෂ පෙළ විග්රහය කැඩූ පළමු අක්ෂරය නම් කරයි, සහ එය සාමාන්යයෙන් කිසිදු අනුමානයකින් තොරව කාණ්ඩය හඳුනා ගනී.
| Error text (Chrome/V8) | What it means |
|---|---|
| Unexpected token < in JSON at position 0 | The body starts with markup: an HTML page or an error document |
| Unexpected end of JSON input | Empty body, or the response was truncated |
| Unexpected token o in JSON at position 1 | You parsed something already parsed, typically an object rather than text |
| Unexpected token u | The body starts with the bare word undefined, usually an empty response rendered as a string |
200 සමඟ හිස් පණිවුඩය වෙනම අවස්ථාවකි: අන්ත ලක්ෂ්යය ක්රියාත්මක විය, කිසිවක් නිපදවූයේ නැත, සහ පහළ කිසිවක් එය සාර්ථකත්වයක් ලෙස ගත්තේය. එය ප්රවාහනයේ නොව යෙදුම් ගිවිසුමේ අසාර්ථකත්වයකි, සහ එහි ස්ථානය ප්රොක්සියේ නොව ඊළඟ පියවරේය. Firefox සහ Safari එම අසාර්ථකතා හතර වෙනත් ආකාරයකින් පවසයි, එබැවින් නිශ්චිත තන්තුව වෙනුවට අක්ෂරය හෝ හිස් පණිවුඩය මත ගැලපෙන්න.
පියවර 5: සාක්ෂි යොමු කරන ස්තරය නිවැරදි කරන්න
මාර්ගගත කිරීමේ ගැටලුවකට ඉල්ලීම නිවැරදි කරන්න: action සකසන්න, හසුරුවනය වැටීම වළක්වන්න, අන්ත ලක්ෂ්යය සහ ක්රමය ගැලපෙන්න සලස්වා නැවත පරීක්ෂා කරන්න. නිරූපණ ගැටලුවකට පණිවුඩය සෑදූ දෙය නිවැරදි කරන්න, සහ දත්ත අපේක්ෂා කළ තැනට දෝෂ ලේඛනය ආපසු එන්නේ ඇයිදැයි සොයා ගන්න. ගිවිසුම් ගැටලුවකට ඔබ ධාවනය කරන අනුවාදය සඳහා රාමුව ඇත්තටම අපේක්ෂා කරන ව්යුහය කියවා, සේවාලාභියා ලිහිල් කරනවා වෙනුවට ප්රතිචාරය ඒ අනුව හැඩගස්වන්න.
ප්රවේශය අවහිර වූ ප්රතිචාරයකට තමන්ගේම වටයක් අවශ්යයි, මන්ද ඉල්ලීමම නිවැරදි විය හැකි අතර පණිවුඩය ඔබේ කේතයට කිසි විටෙක නොපැමිණිය හැක. ප්රතිචාරයේ Access-Control-Allow-Origin බ්රවුසරය යැවූ නිශ්චිත Origin සමඟ සසඳන්න, සහ වයිල්ඩ්කාඩ් අක්ෂරය අක්තපත්ර සහිත ඉල්ලීමක් ඉටු නොකරන බව මතක තබා ගන්න. සේවාලාභියා තුළ credentials: 'include' සේවාදායකය තුළ Access-Control-Allow-Credentials: true සමඟ යුගල කරන්න, සහ ඇමතුම no-cors ප්රකාරය භාවිත කළාදැයි පරීක්ෂා කරන්න, එහිදී විනිවිද නොපෙනෙන පණිවුඩය දෝෂයක් නොව ලේඛනගත ප්රතිඵලයකි.
විග්රහකය වඩාත් ඉවසිලිමත් දෙයකින් ප්රතිස්ථාපනය කිරීම වළක්වා ගත යුතු එකම නිවැරදි කිරීමයි. ප්රතිචාරය කේතයක් ලෙස ඇගයීම හෝ විග්රහ වන තෙක් පෙළ ඉවත් කිරීම ගිවිසුම් නොගැලපීම සඟවා නිහඬතාවයේ මිල වශයෙන් එන්නත් මතුපිටක් එකතු කරයි. එසේම තත්ත්වය පණිවුඩයෙන් වෙන්ව පරීක්ෂා කළ යුතුය: යෙදුම් මට්ටමේ දෝෂ වස්තුවක් රැගෙන යන 200 බොහෝ API තුළ සාමාන්ය වන අතර බර කියවා හැසිරවිය යුතුය.
වෙනත් අයෙකුගේ උදව් අවශ්ය වූ විට අමු අපනයනය වෙනුවට අවම වාර්තාවක් බෙදා ගන්න — ක්රමය, URL, තත්ත්වය, යළි හැරවීම්වලින් පසු අවසාන URL, ප්රතිචාරයේ අන්තර්ගත වර්ගය, පණිවුඩයේ හැඩය සහ අපේක්ෂිත ගිවිසුම. ජාල සංරක්ෂණවල කුකී, ටෝකන, විමසුම් තන්තු සහ පෝරමයේ තිබූ පුද්ගලික දත්ත අඩංගු වේ, සහ ස්වයංක්රීය පිරිසිදු කරන්නා සමාලෝචනයක් නොවේ.
- කිසිදු කේතයක් වෙනස් කිරීමට පෙර පෙරහනක් නොමැතිව ඉල්ලීම අල්ලා ගන්න.
- ආරම්භකයා ඔබේ ස්ක්රිප්ටය වූ බවත් අවසාන URL ඔබේ අන්ත ලක්ෂ්යය බවත් තහවුරු කරන්න.
- විග්රහකය ස්පර්ශ කිරීමට පෙර ප්රතිචාරය වර්ග කරන්න.
- මාර්ගගත කිරීම, ප්රවේශය, නිරූපණය හෝ ගිවිසුම නිවැරදි කරන්න, විග්රහකය ලිහිල් කිරීමෙන් කිසි විටෙක නොවේ.