Just nu i M3-nätverket
Gå till innehåll

Inkludera script hos tredje part.


Aktuellspeedway.se

Rekommendera Poster

Aktuellspeedway.se

Behöver hitta ett sätt för att inkludera PHP/HTML hos tredje part. Lika Svenska Fotbolls Förbundets widgets.

Är ganska okunnig inom JavaScript, så finns det några länkar eller enklare sätt att göra detta på?

Det som ska inkluderas är serietabeller, statistik etc. från våran databas.

 

Misstänker att man på något vis gör så att php scriptet körs på min domän och sedan inkluderas html hos den tredje parten.

Länk till inlägg
Dela på andra webbplatser

Jag hade nog gjort ett js som hämtar resultat från json (php-fil som genererar json-datan) som javascriptet använder sig av och skapar upp element på sida som inkluderar scriptet.

Länk till inlägg
Dela på andra webbplatser

Nej jag har inte det.

 

Skapa en php-fil på din sida. Den ska hämta data från din databas och använda den när du skriver ut i filen.

Lämpligtvis i json eller array, beror på ändamålet och hur mycket data det rår sig om.

 

Börja med att skapa javascriptet med dummy-data och mocka utseendet och gör sedan databiten.

Länk till inlägg
Dela på andra webbplatser

Hej 

 

han menar så här 

http://api.jquery.com/jQuery.post/

 

Eftersom det är lite svårt hjälpa dig när  du inte sagt vilket  du använder systemet dig utav  och hur det andra system ser ut 

 

Wordpress plugin är ett sätt också om du använder  Wordpress

 

 

Nej, det är inte så jag menar.

Man anger en annan domän för källa för ett inbäddat javascript; src="http://min-domän-inte-din.se/scripts.php"

Länk till inlägg
Dela på andra webbplatser
  • 5 months later...
Aktuellspeedway.se

Har lyckats skapa json data utifrån min Mysql databas. Men hur gör man sen för att hämta och skriva ut värderna från php filen?

Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

Stötte på ett problem som jag inte kan hitta lösning på. Har koden:

function myFunction(arr) {
    var out = "";
    var i;
    for(i = 0; i < arr.length; i++) {
        out += '<tr><td>' + arr[i].lag + '</td><td>' + arr[i].matcher + '</td><td>' + arr[i].vinster + '</td><td>' + arr[i].oavgjorda + '</td><td>' + arr[i].forluster + '</td><td>' + arr[i].fpplus + '</td><td>' + arr[i].fpminus + '</td><td>' + arr[i].kvot + '</td><td>' + arr[i].bonus + '</td><td>' + arr[i].poang + '</td></tr><br>';
    }
    document.getElementById("serietabell").innerHTML = out;
}

Vart och vad ska man skriva för att få in <TABLE> etc.

Länk till inlägg
Dela på andra webbplatser

Enligt koden du har där så borde elementet som har ID "serietabell" vara just ett tabell-element. Du bör alltså ha en tom <table id="serietabell"></table> någonstans i HTML-strukturen.

 

Funktionen "myFunction" (som för övrigt kanske borde ha ett vettigare namn?) bör anropas så fort datat är hämtat från den externa källan.

 

Ta förresten bort den sista "<br>" i for-loopen; den kommer att medföra felaktig HTML. Använd istället CSS om du behöver bryta raden (fast det borde du inte behöva eftersom tabellrader gör detta per default).

Länk till inlägg
Dela på andra webbplatser

Det kan ibland vara problem med att använda innerHTML på tabell-element.

Kolla istället på att använda createElement och skapa upp <tr> och underliggande <td>

 

se mer här: http://stackoverflow.com/questions/14061499/how-to-create-table-cell-with-innerhtml-value-textnode-via-loop-of-array

 

Typ så här:

function myFunction(seriedata) {
	var serie_table = document.getElementById('serietabell');
    for(var i = 0; i < seriedata.length; i++) {
		var row =  document.createElement('tr');
		
		var cell_lag  =  document.createElement('td');
		cell_lag.appendChild(arr[i].lag);
        row.appendChild(cell_lag);

		var cell_matcher  =  document.createElement('td');
		cell_matcher.appendChild(arr[i].matcher);
        row.appendChild(cell_matcher);

		var cell_vinster  =  document.createElement('td');
		cell_vinster.appendChild(arr[i].vinster);
        row.appendChild(cell_vinster);

		var cell_oavgjorda  =  document.createElement('td');
		cell_oavgjorda.appendChild(arr[i].oavgjorda);
        row.appendChild(cell_oavgjorda);

		var cell_forluster  =  document.createElement('td');
		cell_forluster.appendChild(arr[i].forluster);
        row.appendChild(cell_forluster);

		var cell_fpplus  =  document.createElement('td');
		cell_fpplus.appendChild(arr[i].fpplus);
        row.appendChild(cell_fpplus);

		var cell_fpminus  =  document.createElement('td');
		cell_fpminus.appendChild(arr[i].fpminus);
        row.appendChild(cell_fpminus);

		var cell_kvot  =  document.createElement('td');
		cell_kvot.appendChild(arr[i].kvot);
        row.appendChild(cell_kvot);

		var cell_bonus  =  document.createElement('td');
		cell_bonus.appendChild(arr[i].bonus);
        row.appendChild(cell_bonus);

		var cell_poang  =  document.createElement('td');
		cell_poang.appendChild(arr[i].poang);
        row.appendChild(cell_poang);

		serie_table.appendChild(row);
    }

}
Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

När jag felsöker via Explorer så får jag inget felmeddelande, men ändå visas inget.

 

Testade att flytta ner getElement delen till slutet och då får jag fram felmeddelande som säger "Arr har inte definerats" för rad 6 i koden. Men jag använde ju arr.lag för den kod jag använde tidigare också och då kunde den hämta datan så tycker det är lite märkligt.

Länk till inlägg
Dela på andra webbplatser

Funktionen loopar ju genom en förmodad array som heter seriedata, men inne i loopen så använder du arr, men arr finns inte och därför får du felet.

 

Byt ut alla arr mot seriedata

 

Om det fortfarande inte funkar så kanske inte seriedata är populerad. Vad det kan bero på är svårt att säga utan att se kringliggande kod. Om du kör funktionen innan HTML-elementen har skapats i DOM-trädet så kommer getElementById inte att hitta tabellen. Det är förmodligen därför felmeddelandet kommer när du har koden längre ner. Jag skulle rekommendera att du samlar scripten långt ner på sidan, gärna innan body-taggen stängs. På så sätt blockerar inte scripten sidrenderingen och den upplevda laddningstiden blir kortare.

Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

var xmlhttp = new XMLHttpRequest();
 var url = "http://www.aktuellspeedway.se/_asra/public/test.php";

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var myArr = JSON.parse(xmlhttp.responseText);
        myFunction(myArr);
    }
}
xmlhttp.open("GET", url, true);
 xmlhttp.send();







function myFunction(seriedata) {

	var serie_table = document.getElementById('serietabell');

    for(var i = 0; i < seriedata.length; i++) {
		var row =  document.createElement('tr');
		
		var cell_lag  =  document.createElement('td');
		cell_lag.appendChild(arr[i].lag);
        row.appendChild(cell_lag);

		var cell_matcher  =  document.createElement('td');
		cell_matcher.appendChild(arr[i].matcher);
        row.appendChild(cell_matcher);

		var cell_vinster  =  document.createElement('td');
		cell_vinster.appendChild(arr[i].vinster);
        row.appendChild(cell_vinster);

		var cell_oavgjorda  =  document.createElement('td');
		cell_oavgjorda.appendChild(arr[i].oavgjorda);
        row.appendChild(cell_oavgjorda);

		var cell_forluster  =  document.createElement('td');
		cell_forluster.appendChild(arr[i].forluster);
        row.appendChild(cell_forluster);

		var cell_fpplus  =  document.createElement('td');
		cell_fpplus.appendChild(arr[i].fpplus);
        row.appendChild(cell_fpplus);

		var cell_fpminus  =  document.createElement('td');
		cell_fpminus.appendChild(arr[i].fpminus);
        row.appendChild(cell_fpminus);

		var cell_kvot  =  document.createElement('td');
		cell_kvot.appendChild(arr[i].kvot);
        row.appendChild(cell_kvot);

		var cell_bonus  =  document.createElement('td');
		cell_bonus.appendChild(arr[i].bonus);
        row.appendChild(cell_bonus);

		var cell_poang  =  document.createElement('td');
		cell_poang.appendChild(arr[i].poang);
        row.appendChild(cell_poang);

		serie_table.appendChild(row);
    }

}

Ändrar jag till seriedata får jag istället "HierarchyRequestError"

 

Här är hela koden iaf.

Länk till inlägg
Dela på andra webbplatser
var xmlhttp = new XMLHttpRequest();
 var url = "http://www.aktuellspeedway.se/_asra/public/test.php";

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var myArr = JSON.parse(xmlhttp.responseText);
        myFunction(myArr);
    }
}
xmlhttp.open("GET", url, true);
 xmlhttp.send();







function myFunction(seriedata) {

	var serie_table = document.getElementById('serietabell');

    for(var i = 0; i < seriedata.length; i++) {
		var row =  document.createElement('tr');
		
		var cell_lag  =  document.createElement('td');
		cell_lag.appendChild(seriedata[i].lag);
        row.appendChild(cell_lag);

		var cell_matcher  =  document.createElement('td');
		cell_matcher.appendChild(seriedata[i].matcher);
        row.appendChild(cell_matcher);

		var cell_vinster  =  document.createElement('td');
		cell_vinster.appendChild(seriedata[i].vinster);
        row.appendChild(cell_vinster);

		var cell_oavgjorda  =  document.createElement('td');
		cell_oavgjorda.appendChild(seriedata[i].oavgjorda);
        row.appendChild(cell_oavgjorda);

		var cell_forluster  =  document.createElement('td');
		cell_forluster.appendChild(seriedata[i].forluster);
        row.appendChild(cell_forluster);

		var cell_fpplus  =  document.createElement('td');
		cell_fpplus.appendChild(seriedata[i].fpplus);
        row.appendChild(cell_fpplus);

		var cell_fpminus  =  document.createElement('td');
		cell_fpminus.appendChild(seriedata[i].fpminus);
        row.appendChild(cell_fpminus);

		var cell_kvot  =  document.createElement('td');
		cell_kvot.appendChild(seriedata[i].kvot);
        row.appendChild(cell_kvot);

		var cell_bonus  =  document.createElement('td');
		cell_bonus.appendChild(seriedata[i].bonus);
        row.appendChild(cell_bonus);

		var cell_poang  =  document.createElement('td');
		cell_poang.appendChild(seriedata[i].poang);
        row.appendChild(cell_poang);

		serie_table.appendChild(row);
    }

}

Ändrar jag till seriedata får jag istället "HierarchyRequestError"

 

Här är hela koden iaf.

 

 

Skämsmössan på...   :wacko:  

 

Sedan skulle man kunna förkorta koden något, med mindre felsökningsmöjligheter;

var cell_matcher  =  document.createElement('td');
cell_matcher.appendChild(seriedata[i].matcher);
row.appendChild(cell_matcher);

// till

row.appendChild(document.createElement('td').appendChild(seriedata[i].matcher));
Länk till inlägg
Dela på andra webbplatser

Aktuellspeedway.se, Står det vilken rad det inträffade på, och i så fall vilken kod har du skrivit där?

 

Jonas__B, jag tycker mig se ett misstag i din kod. :) Den här raden

 

row.appendChild(document.createElement('td').appendChild(seriedata[i].matcher));

 

Kommer nog inte funka. appendChild förväntar sig en DOM-nod, men seriedata.matcher innehåller väl ett primitivt värde, antingen en sträng eller ett heltal. Så du kommer nog inte ifrån att skapa en referens till cellen och sedan sätta innerHTML eller text på den. Eller tänka om funktionen helt.

 

Även om appendChild hade skapat en DOM-nod utifrån en text-sträng, så hade det nog ändå inte funkat, eftersom det ju är den sista länken i kedjan som skickas till den appendChild som körs på row. Det skulle med andra ord bara appendas en text-sträng direkt under row, alltså inte med tillhörande td-element. Brukar inte mecka mecka med DOM på detta sätt så jag kan ha fel, men rent logiskt tycker jag att det borde vara så. :)

Redigerad av ChromaWoods
  • Gilla 1
Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se
cell_lag.appendChild(seriedata[i].lag);

Det är denna raden den klagar på.

 

 

Redigerad av Aktuellspeedway.se
Länk till inlägg
Dela på andra webbplatser
cell_lag.appendChild(seriedata[i].lag);

Det är denna raden den klagar på.

 

 

Precis. Det sker av anledningen jag nämnde i svaret till Jonas__B här ovan. Testa cell_lag.innerHTML = seriedata.lag istället. Och så vidare med resten av fälten förstås.

Länk till inlägg
Dela på andra webbplatser

Kunde inte hålla mig, skrev en lite nättare variant.  :blush:

function myFunction(seriedata) {

    var serieTable = document.getElementById('serietabell');

    for(var i = 0; i < seriedata.length; i++) {
    
        var row = document.createElement('tr');
        
        serieTable.appendChild(function(fields) {
            for (var j = 0, l = fields.length; j < l; j++) {
                var cell = document.createElement('td');
                cell.innerHTML = seriedata[i][fields[j]];
                row.appendChild(cell);
            }
            return row;
        }(['lag', 'matcher', 'vinster', 'oavgjorda', 'forluster', 'fpplus', 'fpminus', 'kvot', 'bonus', 'poang']));
        
    }

}
  • Gilla 1
Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu


×
×
  • Skapa nytt...