Probleme mit jquery.get()

Hallo zusammen,

ich probiere grad mittels

 "$.get('http://[{$oxcmp_shop->oxshops__oxurl->value}]/index.php?cl=my_ajax&action=switchListPicType', function(data) {
		alert(data);
	});"

im Template ein Ajax Abfrage zu starten. Der request wird auch abgesetzt und, laut TemperData mit 200 zurückgeliefert, aber leider steht da Folgendes drinnen:

 <br />
<b>Warning</b>:  ini_set() [<a href='function.ini-set'>function.ini-set</a>]: A session is active. You cannot change the session module's ini settings at this time. in <b>/opt/lampp/htdocs/OXID/453s/admin/oxajax.php</b> on line <b>704</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/OXID/453s/admin/oxajax.php:704) in <b>/opt/lampp/htdocs/OXID/453s/admin/oxajax.php</b> on line <b>731</b><br />

Die Warning hilft mir nicht weiter…

Ich habe rausgefunden das meine Klasse views/my_ajax.php

class my_ajax extends oxUBase
{
}

überhaupt nicht aufgerufen wird.
Aber wenn ich nun direkt im Browser die URL “http://[{$oxcmp_shop->oxshops__oxurl->value}]/index.php?cl=my_ajax&action=switchListPicType” eingebe bekomme ich auch das gewünscht Ergebniss zusehen.
Noch seltsamer ist das es in meinem 4.3.1 EE Shop wunderbar läuft und es keine Warning gibt, aber in der 4.5.7 die ich gerade benutzte.

Kann mir da wer weiterhelfen?

mfg

Bernd Hasis

Wie hast Du denn Dein iniSet geschrieben? Ich habe das bei mir so umgesetzt:


  public function renderJson($json) {
  
    ini_set('display_errors', 0);
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
    header("Cache-Control: no-cache, must-revalidate" );
    header("Pragma: no-cache" );
    header("Content-type: text/json");
    
    echo json_encode($json);
  }

Ich verwende übrigens lieber POST anstatt get, kannst ja mal in meinem Code gucken, ist ne kleine Extension für jQuery. Finde die normale jQuery-AJAX Syntax zudem schöner…

Also dann so:


jQuery.extend({
    postJSON: function( url, data, callback) {
      return jQuery.post(url, data, callback, "json");
   }
});

Hi,

mir ist grad nicht klar wo ich

  public function renderJson($json) { 
   
    ini_set('display_errors', 0); 
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); 
    header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); 
    header("Cache-Control: no-cache, must-revalidate" ); 
    header("Pragma: no-cache" ); 
    header("Content-type: text/json"); 
     
    echo json_encode($json); 
  }  

eintragen soll?

mfg

Du programmierst doch ne Klasse, die via AJAX bestimmte Werte zurückliefert, oder? Vor der Ausgabe sollten noch die header Informationen rein. Bei Dir wirds dann anstatt JSON eventuell text/html als Content-Type sein. Das war ja jetzt nur exemplarisch bzw. ne Hilfestellung, eintragen brauchst das von mir nrigendwo, da mein Code mit Deinem ja nichts zu tun haben kann.

Hi,

also ich habe eigentlich nur eine neue View Klasse erstellt die die ich einfach über index.php?cl=my_ajax aufrufe. (class my_ajax extends oxUBase). Somit kann ich dort auch auch die render Funktion benutzten und die Ausgabe über eine Template Datei gehen lassen. Das hatte damals mit der 4.3.1 auch wunderbar Funktioniert, nun aber nicht mehr.

Oder mache ich etwas grundlegend falsch?

mfg

Wie sieht denn Deine Klasse komplett aus?
Das Template, welches den Output verursacht ist natürlich auch von Interesse.

hi,

also ich habe es komplett runtergebrochen auf

class my_ajax extends oxUBase
{
    public function render()
    {
 return "widget/my_ajax/empty.tpl";
}
}

und im Template steht nur “test”.

Das klappt ja schon nicht…

mfg

Probier mal das aus:


class my_ajax extends oxUBase
{
public function render()
{
ini_set('display_errors', 0); 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); 
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); 
header("Cache-Control: no-cache, must-revalidate" ); 
header("Pragma: no-cache" ); 
header("Content-type: text/html");  
return "widget/my_ajax/empty.tpl";
}
}  

Bist du sicher dass die richtige URL aufgerufen wird? [{$oxcmp_shop->oxshops__oxurl->value}] ist etwas seltsam, das ist ja die Url die im Backend eingetragen ist und nicht die aktuelle Shop-Url. Ansonsten kannst du ja mal von der index.php weg debuggen wie denn der Verlauf bis zur admin/oxajax.php ist, kann mir das gar nicht vorstellen wie der Shop dorthin kommen sollte.
Ansonsten funktioniert alles was du bisher gepostet hast, genau so. Der Fehler muss also woanders liegen.

Es reicht eigentlich der folgende Aufruf:


 "$.get('/index.php?cl=my_ajax&action=switchListPicType', function(data) {
		alert(data);
	});"

Wenn der Shop nicht in einem Unterverzeichnis liegt :smiley:

[QUOTE=Hebsacker;82171]http://wiki.oxidforge.org/Tutorials/List_of_not_overloadable_classes[/QUOTE]

…die Klasse oxUBase kann man doch gar nicht überladen, oder?

Aber dafür extenden!

Hallo zusammen,

folgendes habe ich nun erfolgreich getestet:
Ich habe 2 Systeme die itentisch sind:
Wenn ich ein $.get() von system A zu system B schicke geht es.
Auch andersherum Funktioniert es. Nur versuche ich das $.get() auf dem gleichen System kommt die Warning.
Ich kann mir das einfach nicht erklären…

schonmal danke für eure Hilfe.

mfg

Hab den Fehler beschränkt auf eine UserComponente die ich in meiner config.inc.php einbinde
$this->aUserComponentNames = array();

gibt es eine Möglichkeit nur eine Komponente bei dem aufruf von index?cl=my_ajax nicht mitzuladen?

mfg

Siehe: http://www.oxid-esales.com/forum/showthread.php?p=81920#post81920

Ja danke, das Funktioniert aber nicht für die userComponenten die ich in der config.inc.php eintragen kann.

mfg