| 

.NET C# Java Javascript Exception

3
ich habe eine variable "$xml" in einem php script erstellt und möchte diese nun übergeben in meinen javascript code, um dort die daten auszuwerten!

Überblick
create_xml.php -> hier wird die $xml erstellt
index.html -> ausgabe der daten
functionen.js -> hier wird die $xml benötigt

was ist der beste um die daten nun zu übergeben? passiert die übergabe in der index.html?

zum besseren verständnis hier einmal die index.html

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript" src="js/function.js"></script>
<?php require("create_xml.php"); ?>
</head>
<body>
<div id="map"></div>
</body>
</html>
News:
25.11.2011
burner007 810 1 2 9
burner007 810 1 2 9
7 Antworten
1
Zum Beispiel mit ner globale Javascript-Variabele:

echo "
<script type=\"text/javascript\"><!--
var _xml= \"".$xml."\";
</script>
";


<script>
alert(_xml);
</script>


Edit:

index.html
<?php require("create_xml.php"); ?>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var _xml = "<?php echo $xml; ?>";
</script>
<script type="text/javascript" src="js/function.js"></script>
</head>
<body>
....
</body>
</html>

function.js
alert(_xml);
//oder
function wasWeissIch(){
alert(_xml);
}
25.11.2011
Floyd 14,6k 3 9
Floyd 14,6k 3 9
wie sieht denn hier die genaue implementierung aus, mit der index.html? die js datei liegt nicht im selben verzeichnis wie die php datei!
burner007 25.11.2011
Wieso Verzeichnis? Außerdem müssen wird noch wissen, was in der Variablen gespeichert ist.
LiRo 25.11.2011
1
Das ist die genaue Implementierung: Wenn die $xml Variable schon zur Verfügung steht (nach dem require) schreibst du mit diesem Code das generierte XML in eine globale js-Variable.
Aufpassen musst du nur, dass die Variable auch erst nach dem Setzen genutzt wird.
Unter Umständen wäre es also clever das script-Tag ans Ende von head zu verschieben.

Eine andere Möglichkeit wäre ein ajax call. In jquery könnte das so aussehen:

$.get('path/to/create_xml.php', function(data) {
_xml=data;
});

Bedingung dafür wäre, dass create_xml.php das xml nicht in eine Variable packt, sondern einfach ausspuckt
huckepick 25.11.2011
1
Hab ein vollständiges Beispiel gepostet. Wenn dein XML Anführungsstriche oder Zeilenumbrüche enthällt musst du es noch durch die Funktion http://de3.php.net/addslashes jagen.
Floyd 25.11.2011
1
Müsste so in etwa dann so
<?php require("create_xml.php"); ?>
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript">
var xml = "<?php echo $xml; ?>";
</script>
<script type="text/javascript" src="js/function.js"></script>
</head>
<body>
<div id="map"></div>
</body>
</html>

aussehen.
25.11.2011
LiRo 1,3k 1 9
LiRo 1,3k 1 9
0
wurde gelöscht
25.11.2011
burner007 810 1 2 9
burner007 810 1 2 9
0
in der "$xml" sind koordinaten für marker enthalten die auf einer google maps seite gesetzt werden sollen.

aktuelle index.html
<?php require("create_xml.php"); ?>
<!DOCTYPE html>
<html>
<head>
<title>Google Maps Integration</title>
<link rel="stylesheet" type="text/css" href="css/map.css">
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="js/jquery-1.4.1.min.js"></script>
<script type="text/javascript">
var _xml = "<?php echo $XML; ?>";
</script>
<script type="text/javascript" src="js/markers.js"></script>
</head>
<body>
<div id="map"></div>
</body>
</html>


aktuelle javascript datei

var xml_data = alert(_xml); // übergabe der xml 

$(document).ready(function() {
$("#map").css({
height: 675,
width: 659
});
var myLatLng = new google.maps.LatLng(51.918, 4.47663);
MYMAP.init('#map', myLatLng, 7);
MYMAP.placeMarkers(xml_data); // include php variable with xml data
});

var MYMAP = {
map: null,
bounds: null
}

MYMAP.init = function(selector, latLng, zoom) {
var myOptions = {
zoom:zoom,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
this.map = new google.maps.Map($(selector)[0], myOptions);
this.bounds = new google.maps.LatLngBounds();
}

// set markers
MYMAP.placeMarkers = function(filename) {
$.get(filename, function(xml){
$(xml).find("marker").each(function(){
var name = $(this).find('name').text();
var address = $(this).find('address').text();

// create a new LatLng point for the marker
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));

// extend the bounds to include the new point
MYMAP.bounds.extend(point);

var marker = new google.maps.Marker({
position: point,
map: MYMAP.map
});

marker.setIcon('images/sx-marker.png')

var infoWindow = new google.maps.InfoWindow();
var html='<b>'+name+'</b><br>'+address;
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(MYMAP.map, marker);
});
MYMAP.map.fitBounds(MYMAP.bounds);
});
});
}


bisher erscheint einfach nur ein fenster mit der meldung: "<?php echo $XML; ?>" und danach eine google maps seite ohne gesetzte marker! wenn ich eine xml datei erstelle und dann auslese, statt die die variable $xml zu übergeben, funktionert alles wunderbar.
25.11.2011
burner007 810 1 2 9
alert gibt die Variable aus! Hast du kein PHP aktiviert oder wieso wird die "<?php echo $XML; ?>" nicht ausgeführt? Was steht denn nun in der Variablen $xml?
LiRo 25.11.2011
in der $xml stehen einfach nur die längen- und breitengrade und der name für den marker im xml format
burner007 25.11.2011
ja, du kannst das Ding aber nicht irgendwie nehmen und rein klatschen, also musst du es richtig einbinden.
LiRo 25.11.2011
und wie funktioniert das richtige einbinden?
burner007 25.11.2011
1
Entweder musst du die PHP-Erweiterung für ".HTML"-Seiten aktivieren oder du must die index.html in index.php umbenennen. Ansonsten werden die PHP-Scripte auf in der INDEX-Seite nicht ausgeführt.
Floyd 27.11.2011
0
inhalt von $xml

<?xml version="1.0"?>
<markers>
<marker>
<name>Name</name>
<address>Fakestreet 123</address>
<city>Berlin</city>
<postcode>75876</postcode>
<lat>32.344</lat>
<lng>1.938</lng>
</marker>
<makers>



auch bei: MYMAP.placeMarkers(_xml); werden keine marker gesetzt
25.11.2011
burner007 810 1 2 9
Jo, so als Variable wird nicht gehen, da der Browser (denke ich zumindest, dass du das so meinst, bzw haben willst) nur einen String und kein geparstes XML-Dokument bekommt.
LiRo 25.11.2011
0
Also ich denke, du solltest einfach eine Datei xml.php machen, diese erzeugt dann die XML-Datei und diese -natürlich- mit den passenden Headern, damit der Browser sie gleich parst, verschickt. Ansonsten würde ich deinen Alten Ansatz nehmen (wo die Map funktioniert hat) und nur auf die PHP-Datei verweisen.
Die Header setzt du in PHP so:
header('Content-Type: text/xml');
25.11.2011
LiRo 1,3k 1 9
LiRo 1,3k 1 9
habe mich auch für diesen weg entschieden!
burner007 29.11.2011
Melde dich, wenn du Probleme dabei haben solltest.
LiRo 29.11.2011
0
du kannst problemlos parameter an deine js übergeben:

function.js?param1=1&param2=2

in der function.js einfach mit folgender funktion das ganze parsen:

function parseQuery(query) {
var Params = new Object();
if (!query) return Params;
var Pairs = query.split(/[;&]/);
for (var i = 0; i < Pairs.length; i++) {
var KeyVal = Pairs.split('=');
if (!KeyVal || KeyVal.length != 2) continue;
var key = unescape(KeyVal[0]);
var val = unescape(KeyVal[1]);
val = val.replace(/\+/g, ' ');
if (!Params[key]) Params[key] = new Array();
Params[key].push(val);
}
return Params;
}
[/code]
27.11.2011
Er will (denke ich) eine XML-Datei als DOM haben, also schon mal keine Key-Value-Paare.
LiRo 29.11.2011

Stelle deine Javascript-Frage jetzt!