Zum Inhalt springen

Ajax Problem - Daten werden nicht mirgesandt

Erstellt am 28. August 2012 · 14 Antworten · letzte Antwort am 28. August 2012

Tags: JavaScript & AJAX, Frage

Unbekannter Benutzer ·

Ich bekomme ums verrecken das Ajax nicht ordentlich hin...aber ich kann das Problem einfach nicht erkennen.
Hier meine Vorgehensweise:

Typoscript Setup im root-Template

ajaxCall = PAGE
ajaxCall {
  typeNum = 123456789
  
  # Hier werden die Plugins definiert, die Ajax verwenden
  10 < plugin.tx_myext_pi1

  config {
    disableAllHeaderCode = 1
    xhtml_cleaning = 0
    admPanel = 0
    debug = 0
    no_cache = 1
  }
}

class.tx_myext_pi1.php

$typeNum = $GLOBALS['TSFE']->type;
if ($typeNum == 0) { echo 'normaler content'; }
if ($typeNum == 123456789) {
	print_r($_GET);
	print_r($_POST);
}

Die Links, mit denen ich den Ajax-Request aufrufe sehen so aus:

<a href="javascript: doAjax(5,5)" title="doAjax" class="doajax" id="doajax_#id#">#id#</a>

Hier das Javascript, dass den Request verarbeitet (mootools):

function doajax(param1, param2) {
	// 123456789 = Ajax-Request typeNum
	// Ajax-Request
	var req = new Request.HTML({
		url: 'http://website.com/seite/nochneseite.html?type=123456789',
		urlEncoded: false,
		method: 'get',
		data: {'data1' : 'foo', 'data2' : param1, 'data3' : param2},
		onRequest: function() {
			$('content').set('html', '');
			$('spinner').setStyle('display', 'block');
		},
		update: $('content'),
		onComplete: function(response) {
			$('spinner').setStyle('display', 'none');
		}
	}).send();
}

Die Ausgabe im Frontend verhält sich dabei sehr komisch. Manchmal komm ich gar nicht in die "typeNum == 123456789" Sektion in PHP rein, und erhalte gar keine Ausgabe. Dann verändere ich z.B. im JS das Post-Verhalten von "post" auf "get", und plötzlich gehts wieder für ein paar mal.
Das $_POST Array ist immer leer, das $_GET Array gibt manchmal die Daten weiter, auch recht unverständlich...

Hab ich irgendeine Einstellung vergessen, weil sich das Ganze so seltsam verhält? Normalerweise sollte das doch so funktionieren, oder?

danton ·

Hi

Funktioniert Deine Ajax-Page den ohne JS?

D.h. wenn Du sie folgendermaßen aufrufst?
index.php?id=deineid&type=123456789&meinparameter=1

Jetzt sollte Dein print_r ja auch ohne Ajax ne Ausgabe generieren.

Gruß Niels

danton ·

Check doch mal per TS-Bedingung ob es greift.

[globalVar = GP:meinparameter = 1]
ajaxCall.10 = TEXT
ajaxCall.10.value = TEST123
[global]

Unbekannter Benutzer ·

...hups...falsch gepostet...

Laut Firebug passiert folgendes, sobald ich auf einen Link mit doAjax klicke:

POST http://website.com/index.php?id=[seitenID]&type=123456789

Parameter:
id = [seitenID]
type = 123456789

Antwort-Header:
Connection	Keep-Alive
Content-Type	text/html; charset=utf-8
Date	Tue, 28 Aug 2012 10:17:49 GMT
Keep-Alive	timeout=5, max=99
Server	HTTPD
Set-Cookie	fe_typo_user=1724464a07c7deae65c1c6fe021a8363; path=/
Transfer-Encoding	chunked
X-Powered-By	PHP/5.3.8

Anfrage-Header:
Accept	text/html, application/xml, text/xml, */*
Accept-Encoding	gzip, deflate
Accept-Language	de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Connection	keep-alive
Content-Length	40
Content-Type	text/plain; charset=UTF-8
Cookie	fe_typo_user=d3d8923f1797323a98a5009c583784bd
Host	typo3.p172320.webspaceconfig.de
Referer	http://website.com/seite/nochneseite.html
User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
X-Requested-With	XMLHttpRequest

POST:
foo=bar&param1=5&param2=5

Antwort:
Array
(
    // = $_GET-Array?
    [id] => [seitenID]
    [type] => 123456789
)
Array
(
    // = $_POST-Array?
)

HTML:
Array ( [id] => [seitenID] [type] => 123456789 ) Array ( )
danton ·

Hm d.h. er gibt Dir sauber Dein get-array zurück.
Wenn Du zuerst Dein Post beim print angibst gibt er dann das gleiche zurück?

Unbekannter Benutzer ·

Ja, dann ist es halt umgekehrt: Array ( ) Array ( [id] => 32 [type] => 123456789 )

E: Das komische ist halt auch, dass das ganze laut Firebug doch passen sollte, oder? Kann das am Caching liegen?

danton ·

Naja Firebug sagt das get geht aber post nichts zurück gibt.

Caching hatte ich auch schon überlegt.

Unbekannter Benutzer ·

Das hier: print_r(t3lib_div::_POST()); gibt ebenfalls ein leeres Array array() aus.

Ich hab jetzt mal Caching in meiner Extension folgendermaßen deaktiviert:
ext_localconf.php:
t3lib_extMgm::addPItoST43($_EXTKEY, 'pi1/class.tx_psestates_pi1.php', '_pi1', 'list_type', 0);

In class.tx_myext_pi1.php:
public $pi_checkCHash = FALSE;
$this->pi_USER_INT_obj = 1; (in der Main-Funktion)

=> Gleiches Ergebnis.

E: Auch wenn ich auf der Seite direkt den Cache deaktiviere ändert sich nix.

Unbekannter Benutzer ·

Meinst du die Extension pre $GLOBALS["TSFE"]->set_no_cache(); gar nicht zu Cachen? Hab ich schon probiert, funktioniert nicht.

Ich hab mir jetzt beim Request $GLOBALS ausgeben lassen.
Dort gibts
[HTTP_RAW_POST_DATA] => foo=bar&param1=5&param=5
direkt danach
[_POST] => Array ( )
[HTTP_POST_VARS] => Array ( )

Es kommt einfach kein POST an...ist mir völlig unklar.

Unbekannter Benutzer ·

Ich glaub es funktioniert...zumindest im Moment.

Im JS-Request hab ich die Option "urlEncode: false" entfernt. Nun kommt sowohl POST als auch GET an.
Die Option hab ich am Anfang dort eingefügt, weil Ajax eben nicht funktioniert hat. Wsl. war das aber irgendein andere Fehler.

Hoffentlich bleibt das jetzt so 🙂 .

Danke für die Hilfe danton!

E: Nice...jetzt gehts nimmer. WTF?
E2: Jetzt hab ich beim POST eine 500 Internal Server Error? Wo kommt der den her?
E3: Ok, das war jetzt ein PHP-Fehler...Ajax funktioniert aktuell wieder!

danton ·

Hi

Ich meinte zum einen das mit dem cache aber vor allem das mit dem name="tx_myext_pi1[feldname].
Außerdem wird in dem Post auch ein Tutorial für Ext.-Programmierung verlinkt

Gruß Niels