webForumDet fria alternativet

Skicka/hämta javascript<->PHP

10 svar · 776 visningar · startad av Tulork

TulorkMedlem sedan aug. 2004952 inlägg
#1

Hoppas att någon kan ge mig ett exempel på hur man gör för att javascript ska kontakta en PHP fil med t ex två GET variablar... sen få tillbaka information ifrån PHP filen...

Alternativt tala om för mig vad detta heter så att jag själv kan söka på det.... man brukar ofta se denna funktionen hos sidor som erbjuder tjänster till personer som ej har stöd för PHP, ASP osv...

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#2

En grej kan ju vara Ajax, en annan sak kan vara att man helt enkelt länkar till en php/asp-fil som har javascript-kod i sig. Ex

<script type="text/javascript" src="http://www.domain.se/file.php?var1=Fredrik"></script>

Sen infogar man kodsnutten någonstans på sidan.

Sedan file.php

<?php
if(isset($_GET['var1'])) {
  echo "document.write('" . $_GET['var1'] . " din lilla krabat.');"
} else {
  echo "document.write('En namnlös liten krabat.');"
}
?>

Men detta är den gamla tidens grejs som man använde sig för att erbjuda tjänster till folk som inte hade stöd för ASP, PHP etc.

Nu kör man mer på det som kallas för AJAX, vilket är helt klart mer användbart :)

Google has the answer..

TulorkMedlem sedan aug. 2004952 inlägg
#3

Exakt det jag var ute efter :)

Jag hade gärna provat med Ajax.. men jag vet inte vad jag ska söka efter i detta fallet. Jag är helt och hållet insnöad i PHP och skuttar inte ofta över till Javascript och Ajax.

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#4

Okei..

Det finns ju flera sätt att använda sig av det äldre sättet också... man kan ju inte få till de där snygga, dvs ändringar utan att behöva ladda om sidan..

Mitt ovanstående exempel skulle kunna skrivas så här också, tror jag.

<?php if(isset($_GET['var1'])) { 
 $var = $_GET['var1'];
}
else { $var = ""; }
?>
jsVar = <?=$var?>;

Sen kan man ju sidan som länkar in file.php, använda javascript variabeln jsVar, som den vill :)

TulorkMedlem sedan aug. 2004952 inlägg
#5

ok... tackar för att du hjälper mig :)

Har du något AJAX exempel som utför samma sak som i detta exempel.. bara det att den laddar om datan automatiskt? Eller om du kan peka mig i rätt riktning.

Fredde MannenMedlem sedan nov. 20013 498 inlägg
#6

Du kan ju kolla in följande: http://www.degraeve.com/reference/simple-ajax-example.php

Dock har de använt CGI istället för ex. PHP eller ASP..

du förstår nog principen i alla fall :)

TulorkMedlem sedan aug. 2004952 inlägg
#7

jupp.. ska kolla. Dock så får jag inget av dina exempel att fungera :(

Edit: Mitt fel... ditt första exempel fungerar bra.

TulorkMedlem sedan aug. 2004952 inlägg
#8

Eller nä... jag får det inte att fungera.

TulorkMedlem sedan aug. 2004952 inlägg
#9

Detta fungerar bra

<html>
<head>
<title>Simple Ajax Example</title>
<script language="Javascript">
function xmlhttpPost(strURL) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            updatepage(self.xmlHttpReq.responseText);
        }
    }
    self.xmlHttpReq.send(getquerystring());
}

function getquerystring() {
    var form     = document.forms['f1'];
    var word = form.word.value;
    qstr = 'w=' + escape(word);  // NOTE: no '?' before querystring
    return qstr;
}

function updatepage(str){
    document.getElementById("result").innerHTML = str;
}
</script>
</head>
<body>
<form name="f1" method="POST">
  <p>word: <input name="word" type="text">  
  <input value="Go" type="button" onclick='JavaScript:xmlhttpPost("source.php")'></p>
  <div id="result"></div>
</form>
</body>
</html>

Men jag behöver ändra den lite... får inte det att fungera dock. Jag vill skippa <form> biten och istället anropa source.php?w=hej

Allt som sker på PHP sidan har jag koll på.

För att vara ännu tydligare... jag vill att en användare ska kunna använda <script>anropa source.php?id=555&sec=333</script> på sin sida och få tillbaka det som jag skriver ut i PHP filen....

I PHP tar jag emot GET variablerna...hämtar data ur databasen och skriver ut det som ska skrivas ut.

Det borde gå att bygga om koden ovan.. men jag har ingen aning hur man gör :birp

Det får ju helst bara vara ett par rader långt också.

Exempel på det jag är ute efter.... Google adsense, fast en mycket simpel variant

effataMedlem sedan apr. 2008141 inlägg
#10

Rekommenderar varmt att du använder något av de stora javascriptlibbarna för "ajax" grejer, så får du funktionalitet som är väldokumenterad och vältestad.
T.ex. Mootools Request

Så här skulle koden kunna se ut:

var url = "http://server.com/script.php";
var argument = "parameter1="+value1+"&parameter2=" + value2
var ajax = new Request({url: url, 
	method: 'get',
	onComplete: function (reponseText) {
		// kod när requestet är klart
	}).send(argument);
TulorkMedlem sedan aug. 2004952 inlägg
#11

Jag har en lösning nu..typ. Problemet är att den bara fungerar i FF... har felsökt koden i ett bra tag nu och kan inte komma fram till varför den inte vill fungera i IE och safari

fetch.js

function xmlhttpPost(strURL) {
    var xmlHttpReq = null;
try
 {
 xmlHttpReq=new XMLHttpRequest();

 }
catch (e)
 {
 try
   {
   xmlHttpReq=new ActiveXObject("Msxml2.XMLHTTP");

   }
 catch (e)
   {
   xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP");

   }
 }
	
    xmlHttpReq.open('POST', strURL, true);
    xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHttpReq.onreadystatechange = function() {
	
		 
		 if (xmlHttpReq.readyState == 1) {
            updatepage('<br /><br /><img src="loader.gif" border="0" alt="" style="margin-left:15px;" />');
        }

		
        if (xmlHttpReq.readyState == 4) {
            updatepage(xmlHttpReq.responseText);
        }
    }
    xmlHttpReq.send(getquerystring());
}

function getquerystring() {
    var form = document.forms['feeds'];
    var word = form.feed.value;
    qstr = 'feed=' + escape(word);
	
    return qstr;
}

function updatepage(str){
    document.getElementById("result").innerHTML = str;
}

index.html

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" src="js/fetch.js"></script>
</head>
<body>
<form name="feeds" action="index.html" method="POST">
  <select name="feed">  
  <option value="">Välj</option>
  <option value="http://www.geiser.se/feed" onClick='xmlhttpPost("show_feed.php")'>Geiser.se</option>
  <option value="http://feeds.feedburner.com/tkjblogg?format=xml" onClick='xmlhttpPost("show_feed.php")'>TkJ</option>
  <option value="http://www.dan.se/feed" onClick='xmlhttpPost("show_feed.php")'>Dan.se</option>
  </select><br />
</form>
  <div id="result"></div>
</body>
</html>

show_feed.php

<?php
$url = $_POST['feed'];
	if(isset($_POST['feed']))
	{
		if(preg_match("/http:/", $url))
		{
			require_once("class_rss.php");		//Hämtar klassen
			$rss = new rssHandler();			//Skapar instans till klassen

				//Här anger du RSS-feedens url
			$antal = 20;						//Här anger du hur många inlägg du vill skriva ut
			
			//Här skickar du in datan som klassen behöver och skriver ut den
			echo $rss->show_feed($url, $antal);
		}
	}
?>
Genererad på 365 ms · cache AV · v20260730165559-full.f96bc7eb