» »

AJAX težava

AJAX težava

tadejp81 ::

Zdravo.

Ali obstaja kakšna rešitev, da bi dajal zahteve na oddaljen strežnik?
Imam XMLHttpRequest objekt, z njim pa bi rad gledal določen php file (sql.php)na oddaljenem strežniku. z XMLHttpRequest.open("GET","http://192.168.123.1/mysql.php",true). AJAX mi deluje, če imam vse skupaj shranjeno na strežniku. Pogoj pa je, da se spletni portal izvaja lokalno na računalniku, mysql.php pa se nahaja na nekem strežniku na LAN mreži.
Če ima kdo kakršnekoli izkušnje s tem bi prosil za nasvet. Poskušal sem tudi stvar prelisičiti tako, da sem prenesel celoten js file na strežnik in ga poskušal vstavit v lokalni html, vendar stvar tudi ne deluje, ker si browser za pot vzame referenco HTML fajla (lokalno) v katerega je importan js file.

Hvala in lep dan, Tadej

dukedl ::

lp dukedl

tadejp81 ::

Dukedl, težava je, ker moram imeti vse fajle razen sql.php shranjene lokalno. Client bo tukaj TV sprejemnik, ki bo imel naložene vse fajle interno (razem sql.php naj bi bil na strežniku), v bazo pa bo gledal s pomočjo XMLHttpRequest, in doatoteke sql.php, ki jo bo klical. Torej na apache+php+mysql serverju bo samo datoteka sql.php, ostalo bo vse pognano lokalno.

smacker ::

Zaradi varnostnih razlogov (JS posreduje uporabnikove podatke na nek neznan strežnik) je tako delovanje privzeto izklopljeno.
Rešitev: http://stackoverflow.com/questions/3506...
Meni je ljubša druga rešitev, kjer nastaviš Access-Control-Allow-Origin: *

tadejp81 ::

Žal nobenden od teh postopkov ne deluje, razen če bi uporabil JSONP. Tudi Access-Control-Allow-Origin: * ne moram nastavit v headerju, ker nimam PHP-ja (osnovna stran ne teče na nobenem strežniku, ampak se jo zažene lokalno na računalniku). Poskušal sem postaviti header z js-jem setRequestHeader("Access-Control-Allow-Origin", "*"), vendar ne gre (očitno bi moral prav ročno spremeniti nastavitve v brskalniku), da omogočim CORS, te možnosti pa nimam.

Baje, da se da to narediti z JSONP, z jquery na enostaven način, vendar jaz uporabljam samo čisto JS od samega začetka projekta in ne bi rad zdaj mešal zadev.

Jaz imam tako formo:
function ajax() {
  ajaxCounter++;
  if(window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  }
  else {
    // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.open("GET","General/PHP/GetGeneralRoomInfo.php",true);
  xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      ajaxCounter--;
      ajaxResponse = xmlhttp.responseText;
    }
  }
  xmlhttp.send();
}


Če bi znal kdo to pretvorit, da bi delovalo na principu JSONP. V vsakem primeru hvala za odgovore.

Lep dan, Tadej

Zgodovina sprememb…

  • spremenil: tadejp81 ()

hellboy123 ::

smacker ::

Za omogočit CORS lahko potegneš Chromium browser, neka development različica Chroma. Hitra rešitev za razvoj in če maš nekaj za lastno uporabo. Če boš dal drugim v uporabo, bo treba nekako drugače rešit, ne moreš zahtevat od userjev da nameščajo extra browser za tvoj app.

hellboy123 ::

Tudi za chrome obstaja plugin Allow-Control-Allow-Origin: * ampak JSONP je verjetno boljša opcija.

tadejp81 ::

Hvala.

Gre se v bistvu za TV sprejemnike (imajo nameščen Opera browser), nimam pa pravic, da bi menjal browser ali spreminjal kakršnekoli nastavitve v njem. Verjetno bom poskušal rešit zadevo nekako z JSONP.

Hvala še enkerat za vse nastvete.
Tadej

nightrage ::

Sicer sem bolj v C# vodah sam zakaj pa ne bi poiskusil z kakšnim PHP Web Servisom. https://davidwalsh.name/web-service-php...

Zgodovina sprememb…

googleg1 ::

Ne zastopim, zakaj ne spremenis headerjev streznika iz katerega nalagas spletno stran.

tadejp81 je izjavil:

Žal nobenden od teh postopkov ne deluje, razen če bi uporabil JSONP. Tudi Access-Control-Allow-Origin: * ne moram nastavit v headerju, ker nimam PHP-ja (osnovna stran ne teče na nobenem strežniku, ampak se jo zažene lokalno na računalniku).
Ce servira spletne strani potem je to streznik ki deluje preko HTTP protokola. Vprasanje je samo na kaksen nacin. Ta header ti bo v enem koraku resil vse tezave.

Jakkob ::

Imaš dostop do strežnika in mysql.php datoteke ali ne?

Če da, dodaj v php file:
header('Access-Control-Allow-Origin: *');

Če ne, JSONP.

Zgodovina sprememb…

  • spremenil: Jakkob ()

tadejp81 ::

Zdravo.

Uff... dela zdaj :) Sem poenostavil kodo in postavil testno okolje in zadeva zdaj dela, če vpišem v html header('Access-Control-Allow-Origin: *'). Očitno sem nekaj slabo stestiral v obstoječem projektu. Zdaj bom to samo še prenesel v pravi projekt.

Hvala še enkrat vsem.

test.php
<?php
  header('Access-Control-Allow-Origin: *');
  echo " Test ajax() ";
?>


javascript.js
function ajax() {
  if(window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  }
  else {
    // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.open("GET","http://192.168.123.2/cors/test.php",true);
  xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById("output").innerHTML += xmlhttp.responseText;
    }
  }
  xmlhttp.send();
}


index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="content-type" content="application/ce-html+xml; charset=UTF-8"/>
	<script src="javascript.js" type="text/javascript"></script>
</head>
<body>
  <div id="button">
    <button onclick="ajax()">Test</button> 
  </div>
  <div id="output" style="margin: 10px; padding: 10px; background: green;"></div>
</body>
</html>


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

AJAX kratke naloge

Oddelek: Izdelava spletišč
192281 (1748) Yacked2
»

[javascript] zazeni, pocakaj, osvezi

Oddelek: Programiranje
6986 (819) detroit
»

[ajax] osnove

Oddelek: Programiranje
61063 (907) Volk|
»

AJAX neznana težava

Oddelek: Programiranje
81198 (992) luksorzi
»

Prihaja Firefox 3.1

Oddelek: Novice / Brskalniki
275133 (3423) squngy

Več podobnih tem