Ifomu ye-AJAX ilindele i-JSON kodwa ithola i-HTML: landela impendulo igxathu negxathu
Impendulo engu-200 ayibona ubufakazi bokuthi i-JSON. Landela iphaneli yeNethiweki igxathu negxathu futhi wehlukanise ukwehluleka kokuthutha, kokubonisa nokwesivumelwano.
Ifomu liyathunyelwa, isijikelezisi siyavela, futhi ikhonsoli ithi kunophawu < olungalindelekile ku-JSON endaweni engu-0. Ikhasi ngokwalo lilanda kahle, yingakho umcabango wokuqala uwukusola isihlukanisi noma umhubhe. Ngokuvamile akekho kubo ababili ohilelekile: ukuthumela kuyisicelo esihlukile ekulandeni ikhasi, futhi kubuye nokuthile okungewona i-JSON. Sebenza ngokulandelana okukhombisa ngakho isiphequluli ngempela, ngoba izimpendulo ezine ezingaba khona zidinga izilungiso ezine ezihlukile.
Isigaba 1: bamba ukuthumela okwenzeka ngempela
Vula iphaneli yeNethiweki ngaphambi kokuthumela, setha irekhodi ukuthi ligcine amangeno phakathi kokuhamba, bese wenza ukuthumela kokuhlola okungenabungozi ku-akhawunti oyivunyelwe ukuyisebenzisa. Khetha isicelo esiqalwe yifomu ngokwalo, hhayi isicelo sedokhumenti yekhasi.
Qaphela izihlungi. Isihlungi se-XHR noma se-Fetch silula, kodwa uma uhlaka lusathumela nge-iframe efihliwe noma ngefomu elakhiwe ngokuguqukayo, isihlungi sizofihla isicelo esisodwa esibalulekile. Thumela kanye ngaphandle kwesihlungi kuqala bese ubona okwavela.
Ngesicelo esikhethiwe, bhala izinto eziyisithupha ngaphambi kwanoma yikuphi ukuchaza: indlela, i-URL ephelele enomucu wemibuzo, isimo, uchungechunge lokudlulisela, i-Content-Type yempendulo, nemigqa yokuqala yomzimba. Incwadi yephaneli yeNethiweki ye-Chrome DevTools ihlanganisa ukubuka kwe-Headers, Response ne-Initiator lapho lezi zinto zikhona, futhi amaphaneli afanayo kwezinye iziphequluli akhombisa izinkambu ezifanayo.
Isigaba 2: qinisekisa ukuthi yisicelo osicabangayo
Inani elimangazayo lamaphutha e-JSON empeleni amaphutha okuhambisa. Uma isiphathi sokuthumela siphonsa okuhlukile ngaphambi kokuthi sibize i-preventDefault, isiphequluli senza i-POST yefomu yemvelo iye ekhelini elishiwo isici se-action, futhi iseva iphendula ngekhasi le-HTML eliphelele. Isiphathi asikaze sisebenze, ngakho i-JSON ayikaze icelwe.
Qhathanisa i-URL ekupheleni ne-URL ebizwa yi-JavaScript yakho. Funa ukudlulisela okuphela kwenye indawo, i-slash yokugcina engekho noma eyeqile, ukungafani kwendlela, noma ifomu elithumela endleleni ehlobene lisuka ekhasini elisusiwe. Landela uchungechunge lokudlulisela kuze kube sekupheleni bese ubhala i-URL yokugcina, hhayi eyokuqala.
Bese uhlola umqalisi. Uma isicelo sivela ekuhambeni kwedokhumenti hhayi kusikripthi sakho, usutholile inkinga, futhi akukho shintsho kusihlukanisi sempendulo esizosiza.
Isigaba 3: hlukanisa umphumela ngezigaba ezine
Umphumela ngamunye ungaphansi kwesinye sa lezi ngqo, futhi isigaba sinquma ukuthi ubheka kuphi ngokulandelayo.
| 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 |
Imigqa ephakathi yiyona abantu abayihlola kabi, ngoba isimo singu-200. Ikhasi lokungena elifinyelelwa ngemva kokudlulisela liyimpendulo ye-HTTP enhle ngokuphelele kanye nedokhumenti ye-JSON embi kakhulu. Uhlobo lokuqukethwe i-application/json akukulungisi lokho: kuwumaka nje, futhi umzimba omakwe kabi awukwazi ukuhlaziywa. Ukufinyelela okuvinjiwe yiwona mugqa obukeka njengesicelo esiqediwe: iphaneli ikhombisa isimo, kodwa inqubomgomo yemithombo ehlukene ibamba umzimba, ngakho kusikripthi esibizayo kuwusize lutho njengokuphela kwesikhathi.
Umugqa wesine uvamile ngokufanayo ezinqwabeni ezindala ze-PHP nezahlaka. Isixwayiso sokungasasetshenziswa esinyatheliswa ngaphambi komthwalo obhalwe ngekhodi sikhiqiza umzimba okungekho sihlukanisi se-JSON esizowamukela, futhi ngokuvamile leso sixwayiso siyiyo yonke incazelo.
Isigaba 4: funda iphutha lesihlukanisi ngokwezwi nezwi
Umbhalo wephutha ubiza uhlamvu lokuqala olwephula ukuhlaziya, futhi lokho ngokuvamile kukhombisa isigaba ngaphandle kokuqagela.
| 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 |
Umzimba ongenalutho one-200 uyindaba yawo: indawo yokugcina yasebenza, ayikhiqizanga lutho, futhi okuthile ngaphansi kwakuthatha njengempumelelo. Lokhu ukwehluleka kwesivumelwano sohlelo hhayi kokuthutha, futhi indawo yako isesigabeni esilandelayo hhayi ku-proxy. I-Firefox ne-Safari zisho lokho kwehluleka okune ngendlela ehlukile, ngakho qhathanisa ngohlamvu noma ngomzimba ongenalutho hhayi ngomucu oqondile.
Isigaba 5: lungisa ungqimba okukhomba kulo ubufakazi
Enkingeni yokuhambisa, lungisa isicelo: lungisa i-action, vimbela isiphathi ukuthi siwe, vumelanisa indawo yokugcina nendlela, bese uphinda uhlole. Enkingeni yokubonisa, lungisa okukhiqize umzimba, futhi uthole ukuthi kungani idokhumenti yephutha ibuyiswa lapho bekulindelekile idatha. Enkingeni yesivumelwano, funda isakhiwo sangempela esilindelwe uhlaka kunguqulo oyisebenzisayo, futhi akhe impendulo ngokuhambisana nayo esikhundleni sokukhulula iklayenti.
Impendulo enokufinyelela okuvinjiwe idinga umjikelezo wayo, ngoba isicelo ngokwaso singase silunge, futhi umzimba ungase ungafinyeleli kukhodi yakho. Qhathanisa i-Access-Control-Allow-Origin yempendulo ne-Origin eqondile ethunyelwe isiphequluli, futhi khumbula ukuthi umaka wamahhala awukwanelisi isicelo esinezifakazelo. Hlanganisa credentials: 'include' kuklayenti ne-Access-Control-Allow-Credentials: true kuseva, futhi uhlole ukuthi ubizo lusebenzise imodi ye-no-cors, lapho umzimba ongabonakali kuwumphumela obhaliwe hhayi isiphambeko.
Ukufaka esikhundleni sesihlukanisi okuthile okubekezelela kakhulu ukulungiswa okuwukuphela kokufanele kugwenywe. Ukuhlola impendulo njengekhodi, noma ukuxebula umbhalo kuze kuhlaziywe, kufihla ukungafani kwesivumelwano futhi kunezela indawo yokujova njengokushintshana nokuthula. Ngokufanayo, isimo kufanele sihlolwe ngokwehlukile emzimbeni: u-200 ophethe into yephutha esezingabeni sohlelo uvamile kuma-API amaningi futhi kufanele usingathwe ngokufunda umthwalo.
Uma udinga usizo lomunye umuntu, yabelana ngerekhodi elincane — indlela, i-URL, isimo, i-URL yokugcina ngemva kokudlulisela, uhlobo lokuqukethwe kwempendulo, isimo somzimba kanye nesivumelwano esilindelekile — esikhundleni sokukhishwa okuluhlaza. Izingobo zomlando zenethiweki ziqukethe amakhukhi, amathokheni, imicu yemibuzo kanye nedatha yomuntu siqu eyayisefomini, futhi isihlanzi esizenzakalelayo asiwona umhlolo.
- Bamba isicelo ngaphandle kwesihlungi ngaphambi kokushintsha noma yikuphi ikhodi.
- Qinisekisa ukuthi umqalisi kwakuyisikripthi sakho nokuthi i-URL yokugcina iyindawo yakho yokugcina.
- Hlukanisa impendulo ngezigaba ngaphambi kokuthinta isihlukanisi.
- Lungisa ukuhambisa, ukufinyelela, ukubonisa noma isivumelwano, futhi hhayi ngokukhulula isihlukanisi.