Kirjoittaja Aihe: php scriptin kutsuminen Androidista Ajaxilla  (Luettu 3467 kertaa)

Mistofelees

  • Käyttäjä
  • Viestejä: 641
    • Profiili
php scriptin kutsuminen Androidista Ajaxilla
« : 09.02.23 - klo:14.13 »
Miten kutsua javascriptillä serverillä olevaa php-scriptiä ?

Minulla on nettisivu, jolta yritän lähettää dataa serverille php-scriptille.
Toimii nätisti Linux:n selaimilla.
Androidilta ei toimi.

Linuxilta toimii sekä fetch, että xmlhttp.open -rakenteilla:
    mj="V0/'10:24'"
    response= fetch("http://tupu.neva/rele/talleta.php?val="+mj

sekä
    xmlhttp.open("GET", "http://tupu.neva/rele/talleta.php?val="+mj, true);
    xmlhttp.send();


Androidista käskien php-scripti ei edes käynnisty. (Scriptissä osa, joka tallettaa markkerin scriptin käynnistyessä.)
Sivusto on puhdasta html + Ajax-koodia, koska en ole vielä ehtinyt perehtyä 'parempiin' työkaluihin.
Serveri on samassa sisäverkossa kännnykän ja läppärin kanssa.

Haaskannut tämän kanssa kaksi päivää. Alkaa keittää.

_Pete_

  • Käyttäjä
  • Viestejä: 1836
  • Fufufuuffuuu
    • Profiili
Vs: php scriptin kutsuminen Androidista Ajaxilla
« Vastaus #1 : 10.02.23 - klo:08.14 »
Katso sen android kielen/frameworkin ohjeista miten kuuluu tehdä http-request.

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: php scriptin kutsuminen Androidista Ajaxilla
« Vastaus #2 : 10.02.23 - klo:09.43 »
Linuxilta toimii sekä fetch, että xmlhttp.open -rakenteilla:
    mj="V0/'10:24'"
    response= fetch("http://tupu.neva/rele/talleta.php?val="+mj

sekä
    xmlhttp.open("GET", "http://tupu.neva/rele/talleta.php?val="+mj, true);
    xmlhttp.send();

Tuossa koodissa pistää silmään, että hakuparametria ei enkoodata oikein URL-muotoon. Siihen kannattaa käyttää URLSearchParams-konstruktoria:

https://stackoverflow.com/a/58437909

Koodia: [Valitse]
response = fetch('http://tupu.neva/rele/talleta.php?' + new URLSearchParams({
    val: "V0/'10:24'",
}))


Androidista käskien php-scripti ei edes käynnisty. (Scriptissä osa, joka tallettaa markkerin scriptin käynnistyessä.)

Voi hyvinkin johtua virheellisestä URL:stä ja sen aiheuttamasta erosta selainten toiminnassa. Kokeile uudelleen oikein enkoodatulla parametrilla.

Jos ei auta, katso HTTP-palvelimen lokista, mihin Androidin lähettämä GET-pyyntö päätyy.
« Viimeksi muokattu: 10.02.23 - klo:09.49 kirjoittanut nm »

Mistofelees

  • Käyttäjä
  • Viestejä: 641
    • Profiili
Vs: php scriptin kutsuminen Androidista Ajaxilla
« Vastaus #3 : 10.02.23 - klo:14.22 »
Kiitos. Pitää kokeilla tuota koodausta.

Kuitenkin tuo käsin generoitu osoiterivi noudattaa  minusta standardeja.
Toimii kiltisti Linuxin ja Windowsin selaimilla, mutta ei Androidin ja iBadin.

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: php scriptin kutsuminen Androidista Ajaxilla
« Vastaus #4 : 10.02.23 - klo:17.27 »
Kuitenkin tuo käsin generoitu osoiterivi noudattaa  minusta standardeja.

Parametrin merkit "/", "'" ja ":" on enkoodattava. Muuten selain saattaa hyvinkin hylätä pyynnön jo ennen lähettämistä, tai web-palvelin saattaa ymmärtää polun eri tavalla kuin olet ajatellut, eli pyyntö ei kohdistu php-skriptiin vaan hakemistossa /rele/talleta.php?val=V0/ sijaitsevaan tiedostoon 10:24

JavaScriptin puolella eroa voi tarkastella vaikka tällaisella koodinpätkällä:
https://jsfiddle.net/gzj4sukw/

Koodia: [Valitse]
mj="V0/'10:24'"

url="http://tupu.neva/rele/talleta.php?val="+mj
console.log(url)

encoded="http://tupu.neva/rele/talleta.php?" + new URLSearchParams({val: mj})
console.log(encoded)

Konsoliloki:
Koodia: [Valitse]
"http://tupu.neva/rele/talleta.php?val=V0/'10:24'"
"http://tupu.neva/rele/talleta.php?val=V0%2F%2710%3A24%27"


Toimii kiltisti Linuxin ja Windowsin selaimilla, mutta ei Androidin ja iBadin.

Yhteydessä voi tietty olla muutakin ongelmaa, mutta jos sivusto toimii Androidissa ja iPadissa muilta osin, ja vain fetch/xmlhttprequest epäonnistuu, kyseisessä pyynnössä on jotain vikaa.

Yleensä tällaisia ongelmia kannattaa lähteä selvittämään web-palvelimen lokin ja selaimen kehittäjätyökalujen avulla. Androidin Chromeen ainakin saa kehittäjätyökalut lisäosana.

Mistofelees

  • Käyttäjä
  • Viestejä: 641
    • Profiili
Vs: php scriptin kutsuminen Androidista Ajaxilla
« Vastaus #5 : 10.02.23 - klo:21.48 »
SUURKIITOS kanssakärsijät  :)
Sain uutta puhtia ja ideaa noista kirjoituksistanne.
Apache2:n error-logista löytyi muitakin aiheita korjauksiin.

Korvasin välitettävästä merkkijonosta kaikki erikoismerkit helpommilla ja yksinkertaistin viestiä.
Tein vastaavat muutokset php -scriptiin.
NYT TOIMII !!

Toimiva rakenne ajax-koodissa: (Yksinkertaistettuna)
Koodia: [Valitse]
paikka="K01"
TT="10:50"
mj=paikka+TT
    response= fetch("talleta.php?val="+mj)
Vastaanottavassa päässä talleta.php:ssä:
Koodia: [Valitse]
$gj=$_GET['val'];
Tämä on osa nettisivua, jolla annetaan aktivointiajat rakentamilleni esp8266-ohjatuille releille. Tällä hetkellä releitä on kolme koekäytössä, mutta pöydällä odottaa neljä lisää.
« Viimeksi muokattu: 10.02.23 - klo:21.50 kirjoittanut Mistofelees »

Mistofelees

  • Käyttäjä
  • Viestejä: 641
    • Profiili
Vs: php scriptin kutsuminen Androidista Ajaxilla
« Vastaus #6 : 11.02.23 - klo:11.53 »
Ei tämä tähän loppunut.
Ongelma ratkesi kahdella puhelimella.
Kolmas puhelin ei suostunut hakemaan muuttuneita arvoja serveriltä, joten luulin sen kärsivän aiemmin kuvaamastani viasta.
Netistä löytyi kuitenkin ohjeet nettisivun lataamiseen cachen ohi ja tämä auttoi.
Pistin html-sivun headeriin seuraavat loitsut sen enempiä miettimättä:

Koodia: [Valitse]
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

LISÄYS MYÖHEMMIN:
Ei auttaneet netin ohjeet eikä muutaman AJA-kirjan lukeminen.
Lopulta ratkaisu löytyi vahingossa.
Android ei tykkää, jos samalla HTML-sivulla on kaksi < script xxxxxxxxx > -kutsua. Toinen latautuu vain satunnaisesti.
Syytä en viitsi alkaa etsiä.
Yhdistelin scriptejä ja muutin toimintoja. Nyt on toiminut jo muutamia päiviä.
Ohje löytyi netistä sivulta, jolla ongelman ratkaisua on esitelty paremminkin:
« Viimeksi muokattu: 05.03.23 - klo:00.06 kirjoittanut Mistofelees »