JavaScript AJAX probléma

JavaScript AJAX probléma
2021-11-09T15:44:41+01:00
2022-01-08T00:35:38+01:00
2022-12-06T23:40:40+01:00
*deleted_23419333
Sziasztok!

A this.readyState az 4, az rendben van így, de a this.status miért 0? 200-nak kellene lennie.

A https://api.tezfiles.com/v1/files/ oldal tartalmát szeretném megkapni a this.responseText változóval:

{"errors":{"limit":[{"message":"must be an integer (max 1000)"}],"offset":[{"message":"must be an integer"}]}}

A kód:

<!DOCTYPE html> <html> <head> <script> function loadDoc() { var request = new XMLHttpRequest(); var uri = 'https://api.tezfiles.com/v1/files/'; request.open("GET", uri ); request.onreadystatechange = function() { alert( this.readyState + ' - ' + this.status ); // alert(this.responseText); }; request.send(); } </script> </head> <body> <input type="button" onclick="loadDoc()"> </body> </html>

Köszönöm a segítséget.
Mutasd a teljes hozzászólást!
Before the request completes, the value of status is 0. Browsers also report a status of 0 in case of XMLHttpRequest errors.

XMLHttpRequest.status - Web APIs

Lehet, hogy valami hiba történt?!
Mutasd a teljes hozzászólást!

  • Képernyőkép: jajj.html console
    Mutasd a teljes hozzászólást!
  • Próbálkoztam ezzel, de sajnos hiába:

    xhr.open('GET', 'https://api.tezfiles.com/v1/files/'); xhr.setRequestHeader( 'Access-Control-Allow-Origin', '*'); xhr.withCredentials = true; // xhr.withCredentials = false; console.log('OPENED: ', xhr.status);
    Mutasd a teljes hozzászólást!
  • Hát bizony ha az api.tezfiles.com nem szeretné hogy akármilyen JS kódból hozzáférjenek (vagyis nem küldi az ezt engedélyező header-öket a válaszban), akkor nem fogsz tudni hozzáférni JS kódból. Ha ez valami jogszerű hozzáférés (publikus szolgáltatás ami cross-origin elérést is lehetővé tesz, vagy van rá megfelelő megegyezés), akkor az oldal üzemeltetője fog tudni neked segíteni. Ha meg csak úgy szerettél volna máshonnan jövő tartalmat "beollózni" a saját oldaladba, akkor így jártál...
    Mutasd a teljes hozzászólást!
  • De akkor böngészőből miért/hogyan tudom elérni? Létezhet ilyen, hogy csak JS kérést tilt, de böngészőt és mást nem? Tudtommal ehhez az API-hoz nem kell engedély, se regisztráció, se semmi. Illetve vannak olyan funkciók, amikhez már kell fiók, kell belépés, de tudtommal ehhez semmi sem kell.



    Egyébként PHP-s cURL vagy file_get_contents lehet, hogy működne csak JS Ajax nem? Ilyen létezhet?
    Mutasd a teljes hozzászólást!
  • Egyébként PHP-s cURL vagy file_get_contents lehet, hogy működne csak JS Ajax nem? Ilyen létezhet?

    Igen, létezik ilyen. PHP szerveroldalon fut, JS Ajax meg kliens oldalon. Más szabályok vannak rá.

    Szerverbeállításnál megadhatóak csak ezek, Te egy Ajax kéréshez nem csaphatod hozzá önkényesen a CORS  domainek listájához a küldő doménjét.
    Mutasd a teljes hozzászólást!
  • De akkor böngészőből miért/hogyan tudom elérni? Létezhet ilyen, hogy csak JS kérést tilt, de böngészőt és mást nem?

    Egyszerű: a böngésző maga jelzi a szerver felé, hogy ez a kérés nem az adott oldalon futó JS-ből lett kezdeményezve, és a böngésző maga akadályozza meg, hogy a JS kód hozzáférjen a válaszhoz engedély hiányában. Ha PHP-ból indítod a kérést, akkor nincs böngésző és azt hazudhatsz be a request headerökbe amit csak akarsz.

    És hogy miért csinálja mindezt a böngésző? Azért, mert mindenféle biztonsági kockázatokat vetne fel, ha egy oldal csak úgy tetszőleges másik oldalra küldhetne kérést. Gondold csak el, be vagy lépve másik tabon a bankodba is, az aktuális oldal pedig "mellesleg" AJAX-szal lekérdezné a bankszámla-adataidat...
    Mutasd a teljes hozzászólást!


  • Csak kíváncsiságból: írhat magának valaki olyan böngészőt vagy egy már működő, mondjuk nyílt forráskódú böngészőt személyre szabhat valaki úgy, hogy megtudja nézni a másik tab-on levő adatokat vagy mondjuk egy custom böngészővel tudnám használni ezt az API-t személyre szabott header-ökkel, mint például egy belehazúdós cURL kéréssel?
    Mutasd a teljes hozzászólást!
  • A same-origin policy olyan dolog, amit a böngésző tartat be az oldalakkal, úgyhogy igen, elméletileg tudsz magadnak olyan böngészőt írni, vagy egy meglévőt úgy átírni, hogy ne legyen ilyen. Azt nem tudom, a gyakorlatban ezt milyen nehéz lenne megvalósítani.

    Egyébként nem biztos hogy egyből saját böngészőt kell fordítanod ilyesmi miatt. Ha jól tudom, a bővítményekre más szabályok vonatkoznak, tehát bővítményből lehet hogy el tudod érni az adott oldalt akkor is, ha nem küld CORS header-öket. Érdemes lehet utánanézni.
    Mutasd a teljes hozzászólást!
  • <?php header( 'Access-Control-Allow-Origin: *' ); ?>
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd