<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ajax | Nerdpress.org</title>
	<atom:link href="https://nerdpress.org/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>https://nerdpress.org</link>
	<description>...dev, tech problems and solutions.</description>
	<lastBuildDate>Mon, 29 Mar 2021 15:54:30 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Ajax Deeplinks mit jQuery Address</title>
		<link>https://nerdpress.org/2011/04/04/ajax-deeplinks-mit-jquery-address/</link>
		
		<dc:creator><![CDATA[Ivo Bathke]]></dc:creator>
		<pubDate>Mon, 04 Apr 2011 12:49:38 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Ajax]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=1443</guid>

					<description><![CDATA[<p>Aus der Reihe: feine jQuery Plugins, um nicht zu sagen essentielle jQuery Plugins, heute: jQuery Address Damit kann man sehr einfach Deeplinks in Ajax getriebenen Seiten realisieren. So lassen sich zum Beispiel verschiedene Zustände in einer Ajax Seite navigierbar machen, wie zum Beispiel einzelne Tabs via Link öffnen oder auch Akkordion Zustände. Oder man kann &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2011/04/04/ajax-deeplinks-mit-jquery-address/" class="more-link">Continue reading<span class="screen-reader-text"> "Ajax Deeplinks mit jQuery Address"</span></a></p>
The post <a href="https://nerdpress.org/2011/04/04/ajax-deeplinks-mit-jquery-address/">Ajax Deeplinks mit jQuery Address</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Aus der Reihe: feine jQuery Plugins, um nicht zu sagen essentielle jQuery Plugins, heute:<br />
<a href="https://github.com/asual/jquery-address">jQuery Address</a></p>
<p>Damit kann man sehr einfach Deeplinks in Ajax getriebenen Seiten realisieren.</p>
<p>So lassen sich zum Beispiel verschiedene Zustände in einer Ajax Seite navigierbar machen, wie zum Beispiel einzelne Tabs via Link öffnen oder auch Akkordion Zustände.<br />
Oder man kann Ajax Bereiche SEO technisch erfassbar machen.</p>
<p><span id="more-1443"></span></p>
<p>Das Plugin nutzt auch die HTML5 History API, damit werden Ajax Zustände in die Browser History geschrieben, womit sich der Zurück Button dann auch damit nutzen läßt ohne die Seite neu laden zu müssen.<br />
Auch kann man einfach die Url im Address Bar ändern.</p>
<p>Am besten schaut man sich mal die Beispiele auf der <a href="http://www.asual.com/jquery/address/samples/">Demo Seite</a> an.</p>
<p>Tolle Sache.  </p>The post <a href="https://nerdpress.org/2011/04/04/ajax-deeplinks-mit-jquery-address/">Ajax Deeplinks mit jQuery Address</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ajax (Fake) Push: Long Polling mit HTML 5 WebWorker</title>
		<link>https://nerdpress.org/2010/06/11/ajax-fake-push-long-polling-mit-html-5-dedicated-worker/</link>
					<comments>https://nerdpress.org/2010/06/11/ajax-fake-push-long-polling-mit-html-5-dedicated-worker/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 11 Jun 2010 11:28:23 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[Html5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Long Poll]]></category>
		<category><![CDATA[Push]]></category>
		<category><![CDATA[Threads]]></category>
		<category><![CDATA[WebWorker]]></category>
		<category><![CDATA[Worker]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=1037</guid>

					<description><![CDATA[<p>Push-Mechanismen im Web sind mittlerweile weit verbreitet &#8211; die Anforderungen an die Infrastruktur aber recht hoch. Nichts geht ohne Plugins (Flash, Applet, WebSocket) &#8211; dann braucht man mindestens einen zweiten Server, der via persistenter Verbindung Nachrichten verteilt. Bedient man sich herkömmlicher JavaScript-Technik, muss man mit aynchronen Ajax-Requests herumkaspern, sich mit Timeouts, Memory-Leaks und Cross-Domain-Sicherheitspolicen herumschlagen. &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2010/06/11/ajax-fake-push-long-polling-mit-html-5-dedicated-worker/" class="more-link">Continue reading<span class="screen-reader-text"> "Ajax (Fake) Push: Long Polling mit HTML 5 WebWorker"</span></a></p>
The post <a href="https://nerdpress.org/2010/06/11/ajax-fake-push-long-polling-mit-html-5-dedicated-worker/">Ajax (Fake) Push: Long Polling mit HTML 5 WebWorker</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Push-Mechanismen im Web sind mittlerweile weit verbreitet &#8211; die Anforderungen an die Infrastruktur aber recht hoch. Nichts geht ohne Plugins (Flash, Applet, WebSocket) &#8211; dann braucht man mindestens einen zweiten Server, der via persistenter Verbindung Nachrichten verteilt. </p>
<p><span id="more-1037"></span></p>
<p>Bedient man sich herkömmlicher JavaScript-Technik, muss man mit aynchronen Ajax-Requests herumkaspern, sich mit Timeouts, Memory-Leaks und Cross-Domain-Sicherheitspolicen herumschlagen. Und auch hier kommt man nicht herum, den Server zu tweaken oder gleich einen zweiten aufzusetzen, der ausschließlich auf Polls oder Long-Polls trainiert ist.</p>
<p>Gerade in der PHP-Welt ist es nicht einfach, einen üblichen LAMP-Stack soweit zu bringen, dass so etwas auch unter Last funktioniert &#8211; Java ist da wie immer weiter und bietet mit <a href="http://java.sun.com/products/jms/">JMS</a> ein einheitliches Interface &#8211; da gibt es Software für den gewöhnlichen Servletcontainer, im Anwendungsserver muss das laut Spezifikation sogar im Lieferumfang enthalten sein.</p>
<p>Möchte man trotzdem mit &#8220;Bordmitteln&#8221; mal schnell eine Chatbox aufsetzen, führt Longpolling + Ajax eigentlich schnell zu einem akzeptablen Ergebnis &#8211; nichts für Millionen konkurrierende Zugriffe, aber immerhin eine nette Spielerei für zwischendurch. Wäre da nicht ständiges Warten auf die Response, das sich nach einiger Zeit einerseits mit einer merklichen Ruckelorgie bemerkbar macht oder gar den Mauszeiger in eine ewiglich drehende Sanduhr verwandelt.</p>
<h4>HTML 5 to the rescue&#8230;</h4>
<p>HTML 5 kann sogenannte Dedicated Worker &#8211; &#8220;echte&#8221; Workerthreads auf Betriebssystemebene, die man mit einer Zeile spawnen kann.</p>
<pre class="brush: jscript; title: ; notranslate">
new Worker('meinScript.js')
</pre>
<p>Innerhalb eines Threads kann man lang laufende Rechenoperationen im Hintergrund verstecken &#8211; warum also nicht auch einen Ajax-Request? Allerdings haben diese Threads einen Nachteil: Aus Sicherheitsgründen laufen sie in einem klar abgegrenzten Scope, in dem sozusagen nichts vorhanden ist. Auch keine Referenz auf das document-Object der Elternseite. Das stoppt die meisten Javascript-Bibliotheken, wie bspw. JQuery. Man muss sich also mit Bordmitteln begnügen.</p>
<p>Eine Methode, die einen Worker initialisiert, könnte so aussehen:</p>
<pre class="brush: jscript; title: ; notranslate">
    _initializeLongPoll: function()
    {
      var messenger = this;

      var worker = new Worker('my-ajax-worker.js');
        worker.onmessage = function(event)
        {
          var json = jQuery.parseJSON(event.data);
            
          // NEUE CHAT-NACHRICHT ERZEUGEN
          messenger.$_list.append($('&lt;li class=&quot;messenger-list-item&quot;&gt;'
            + '&lt;strong class=&quot;messenger-list-item-author&quot;&gt;' + json.author + '&lt;/strong&gt;'
            + '&lt;span class=&quot;messenger-list-item-message&quot;&gt;' + json.text + '&lt;/span&gt;&lt;/li&gt;'));
        };
    }
</pre>
<p>&#8220;my-ajax-worker.js&#8221; ist ausschließlich für den Ajax-Request zuständig. Hier wird ein dynamisches Javascript in einem Symfony-Projekt generiert:</p>
<pre class="brush: jscript; title: ; notranslate">
    
    var onLoad = function()
    {
      var output = httpRequest.responseText;
      if (output) {
       
        // DELEGIERT DIE RESPONSE ZURÜCK.
        postMessage(output.trim());
        
        // ERZEUGE NEUEN XmlHttpRequest
        httpRequest = initRequest();
      }
    };

    // WIR SPAREN UND DEN X-BROWSER XmlHttpRequest-KRAM
    var httpRequest = initRequest();
</pre>
<p>Details zum serverseitigen Script möchte ich an dieser Stelle vernachlässigen, im Grunde funktioniert es folgendermaßen: Es arbeitet so lange, bis eine Änderung festzustellen ist. Erst bei Änderung wird die Response an den Client ausgeliefert (darum heißt es &#8220;Long-Polling&#8221;, weil ein Request ganz schön lange dauern kann):</p>
<pre class="brush: java; title: ; notranslate">
while(true)
{
  if(newData())
  {
    return getNewData()
  }
  sleep(5);
}
</pre>
<p>Der Kram funktioniert natürlich nur in HTML5-Browsern, die das Worker-Objekt unterstützen. Dazu zählen Firefox 3.6, Google Chrome und natürlich Safari. Ob Opera es beherrscht, weiß ich nicht, ob der IE 8 es beherrscht, bezweifle ich. Aber wie gesagt: Es ist nur eine Spielerei und keine produktiv geeignete Anwendung. Demnächst schau ich mir auch mal die WebSocket API an&#8230;</p>
<h4>Known Issues</h4>
<p>Vorsicht mit <a href="http://php.net/manual/de/function.session-start.php">session_start()</a> und konkurrierenden (asynchronen) HTTP-Zugriffen. Im User-Sessionscope wird der Apache immer auf das Schließen einer Session warten, bis er dem nächsten Request erlaubt, die Session wieder &#8220;aufzunehmen&#8221;. Und im Normalfall dauert eine User-Session genau so lange wie die Request-Lifetime. Das führt dazu, dass bei 4 gleichzeitig abgefeuerten XmlHttpRequests diese trotzdem als Stack nach dem FIFO-Prinzip abgehandelt werden. Man verliert somit den Vorteil der Asynchronität. Es ist also zwingend erforderlich, die Session bereits vor dem Long-Poll-Loop abzuschließen (durch den Aufruf von <a href="http://php.net/manual/en/function.session-write-close.php">session_write_close()</a>;</p>The post <a href="https://nerdpress.org/2010/06/11/ajax-fake-push-long-polling-mit-html-5-dedicated-worker/">Ajax (Fake) Push: Long Polling mit HTML 5 WebWorker</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
					<wfw:commentRss>https://nerdpress.org/2010/06/11/ajax-fake-push-long-polling-mit-html-5-dedicated-worker/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Next Level Javascript Error Tracking</title>
		<link>https://nerdpress.org/2010/04/10/next-level-javascript-error-tracking/</link>
					<comments>https://nerdpress.org/2010/04/10/next-level-javascript-error-tracking/#comments</comments>
		
		<dc:creator><![CDATA[Max Girkens]]></dc:creator>
		<pubDate>Sat, 10 Apr 2010 12:11:03 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Exceptionhub]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tracking]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=914</guid>

					<description><![CDATA[<p>Exceptionhub protokolliert clientseitig auftretende Javascript Fehler. * Logs all JavaScript errors (local or remote) * Provides a stack trace to find the cause in all browsers * Groups errors by cause * Development and Production modes * RSS feeds for errors Einfach einbinden via Javascript im Seitenheader. Dann kriegt man schöne Statistiken über Javascript Fehler &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2010/04/10/next-level-javascript-error-tracking/" class="more-link">Continue reading<span class="screen-reader-text"> "Next Level Javascript Error Tracking"</span></a></p>
The post <a href="https://nerdpress.org/2010/04/10/next-level-javascript-error-tracking/">Next Level Javascript Error Tracking</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.exceptionhub.com/">Exceptionhub</a> protokolliert clientseitig auftretende Javascript Fehler.</p>
<blockquote><p>
    *  Logs all JavaScript errors (local or remote)<br />
    * Provides a stack trace to find the cause in all browsers<br />
    * Groups errors by cause<br />
    * Development and Production modes<br />
    * RSS feeds for errors
</p></blockquote>
<p>Einfach einbinden via Javascript im Seitenheader. Dann kriegt man schöne Statistiken über Javascript Fehler mit Browser und OS Infos, Mail-Notifications usw.<br />
<span id="more-914"></span><br />
Ein bißchen wie Google Analytics.</p>
<p>Das ganze ist (noch) kostenlos während der betaPhase.</p>
<p>Auf die Idee clientseitige Fehler via Ajax auf dem Server zu loggen, wäre ich irgendwie garnicht gekommen. <a href="http://www.the-art-of-web.com/javascript/ajax-onerror/">Andere</a> <a href="http://www.codeproject.com/kb/Ajax/LogClientSideJSErrors2Srv.aspx">Leute schon</a>.<br />
Trotzdem wundert es mich in Nachhinein fast dass es da nichts verbreiteteres gibt.<br />
Das schreit ja eigentlich nach einem Symfony Plugin, oder?</p>
<p>:)</p>The post <a href="https://nerdpress.org/2010/04/10/next-level-javascript-error-tracking/">Next Level Javascript Error Tracking</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
					<wfw:commentRss>https://nerdpress.org/2010/04/10/next-level-javascript-error-tracking/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions</title>
		<link>https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/</link>
		
		<dc:creator><![CDATA[Max Girkens]]></dc:creator>
		<pubDate>Sun, 17 Jan 2010 19:24:35 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[FormFramework]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Widget]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=686</guid>

					<description><![CDATA[<p>Wenn man versucht mit Symfony/Doctrine/Generator Bordmitteln &#8220;related&#8221; Objekte in Formularen darzustellen, wird das schnell schwierig bei etwas mehr Daten. &#8220;Ein Projekt wird mehreren Mitarbeitern zugewiesen. Es gibt aber 500.000 Mitarbeiter.&#8221; Schon rendert sich das generierte multi-select im Projekt-Formular den sprichwörtlichen Wolf. Hier braucht man eigentlich schon was mit Ajax/Pagination. Hier ein Entwurf für ein FormWidget, &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/" class="more-link">Continue reading<span class="screen-reader-text"> "Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions"</span></a></p>
The post <a href="https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/">Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Wenn man versucht mit Symfony/Doctrine/Generator Bordmitteln &#8220;related&#8221; Objekte in Formularen darzustellen, wird das schnell schwierig bei etwas mehr Daten.<br />
&#8220;Ein Projekt wird mehreren Mitarbeitern zugewiesen. Es gibt aber 500.000 Mitarbeiter.&#8221;<br />
Schon rendert sich das generierte multi-select im Projekt-Formular den sprichwörtlichen Wolf.<br />
Hier braucht man eigentlich schon was mit Ajax/Pagination.</p>
<p>Hier ein Entwurf für ein <a href="http://www.symfony-project.org/more-with-symfony/1_4/en/05-Custom-Widgets-and-Validators">FormWidget</a>, Plugin das seine eigenen Ajax Actions haben soll.<span id="more-686"></span><br />
Also erstmal</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget 
</pre>
<p>anlegen.</p>
<p>Die Struktur <strong>darin</strong> sieht dann nachher so aus:</p>
<pre class="brush: bash; title: ; notranslate">
./lib/myMightyWidget.class.php            
./modules/myMightyWidget/actions/actions.class.php
./modules/myMightyWidget/templates/_myMightyWidget.php       
./modules/myMightyWidget/templates/myajaxactionSuccess.php
( ./web/css/myMightyCSSFile.css )
( ./web/js/myMightyExternalJSFile.js )
</pre>
<p>als erstes:</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/lib/myMightyWidget.class.php
</pre>
<p>Das Template HTML schreiben wir in ein Partial das wir dann nachher in der render-Methode holen.<br />
Dafür müssen wir uns eben den  Partial Helper laden, von Haus aus gibt es die Funktion nicht in der Widget Klasse.<br />
Falls unser Widget einen eigenen Stylesheet und auch eine eigene JS Datei haben möchte, könnten wir die beiden auch bequem im entsprechenden myMightyWidget/web Ordner unterbringen. Und auch via den getStylesheet/ getJavascripts Methoden laden lassen.</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/lib/myMightyWidget.class.php
</pre>
<pre class="brush: php; title: ; notranslate">
class myMightyWidget extends sfWidgetForm
{
	
  public function configure( $options = array(), $attributes = array() )
  {
  	
  	$this-&gt;addOption(  &quot;someOption&quot; );
  	
  	$this-&gt;addOption(  &quot;someOtherOption&quot;, &quot;default&quot; );
  }
  
  public function getStylesheets()
  {
    return array(
    	&#039;/myMightyWidget/css/myMightyWidget.css&#039; =&gt; &#039;&#039;
    );
  }
  
  public function getJavascripts()
  {
    return array(
    	&#039;/myMightyWidget/js/myMightyWidget.js&#039;
    );
  }
  
  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
  	
        //load partial Helper as we want to outsource the Template
	sfContext::getInstance()-&gt;getConfiguration()-&gt;loadHelpers(&#039;Partial&#039;);
  	
  	
    $options = array(
        &#039;someOption&#039;           =&gt; $this-&gt;getOption(&#039;someOption&#039;),
        &#039;someOtherOption&#039;  =&gt; $this-&gt;getOption(&#039;someOtherOption&#039;)
    );
    
  	return  get_partial( &#039;myMightyWidget/myMightyWidget&#039;, $options );
  }
  
}
</pre>
<p>dann brauchen wir den modules Ordner, hier schonmal für das Partial template<br />
also den Ordner</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/modules/myMightyWidget
</pre>
<p> anlegen.</p>
<p>Darin dann das Partial &#8220;_myMightyWidget.php&#8221; anlegen:</p>
<p>(ich setze aus Schreibfaulheit einfach mal jQuery voraus &#8230;)</p>
<pre class="brush: php; title: ; notranslate">

&lt;script type=&quot;text/javascript&quot;&gt;

	$(document).ready(function() {
            $(&quot;#myMightyWidget&quot;).find(&quot;.ajaxResults&quot;)load( &#039;&lt;?php echo url_for( &quot;myMightyWidget/myAjaxAction&quot; ); ?&gt;&#039; );
        });
		
&lt;/script&gt;

&lt;div id=&quot;myMightyWidget&quot;&gt;

    Hello ...

    &lt;div class=&quot;ajaxResults&quot;&gt;&lt;/div&gt;

&lt;/div&gt;

</pre>
<p>Für die Ajax Daten dann Action und Template anlegen:</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/modules/myMightyWidget/actions/actions.class.php
</pre>
<pre class="brush: php; title: ; notranslate">
class myMightyWidgetActions extends sfActions
{
	
	public function executeMyAjaxAction( sfWebRequest $request )
 	{
 		$this-&gt;world = &quot;World&quot;;
    	}
	
 }
</pre>
<p>und das Template:</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/modules/myMightyWidget/templates/myajaxactionSuccess.php
</pre>
<pre class="brush: php; title: ; notranslate">
&lt;strong&gt;
    &lt;?php echo $world; ?&gt;
&lt;/strong&gt;
</pre>
<p>Dann in der app, wo wir das Widget benutzen möchten einfach das Modul &#8220;myMightyWidget&#8221; aktivieren (settings.yml).<br />
Und das Widget im Template oder direkt in einer Formklasse einbinden.<br />
Und man kann sich mitten im Formular durch irgendwelche Ajax Listen blättern, oder was einem eben einfällt.</p>
<p>Um die Ergebnisse dem generierten Formular &#8220;unterzuschmuggeln&#8221; muss man nur via JS inputs mit den entsprechenden Namen erzeugen, dann wird das ganz normal mitverarbeitet.<br />
zB.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;hidden&quot; name=&quot;project&amp;#91;mitarbeiter_list&amp;#93;&amp;#91;&amp;#93;&quot; value=&quot;&lt;?php echo $mitarbeiter_id ?&gt;&quot; /&gt;
</pre>The post <a href="https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/">Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>XMLHttpRequest: Spezifikation abgeschlossen</title>
		<link>https://nerdpress.org/2009/11/20/xmlhttprequest-spezifikation-abgeschlossen/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 20 Nov 2009 16:20:56 +0000</pubDate>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[10 jahre]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Call]]></category>
		<category><![CDATA[Draft]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[November]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[Spezifikation]]></category>
		<category><![CDATA[Working]]></category>
		<category><![CDATA[xmlhttprequest]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=598</guid>

					<description><![CDATA[<p>Zumindest laut W³C &#8211; da kann man sich ja freuen, dass das Objekt der AJAX/S-Begierde 10 Jahre nach der Implementation im IE5 endgültig spezifiziert wurde — wenn der Last Call des W³Cs unbeantwortet bleibt .-) [ via ]</p>
The post <a href="https://nerdpress.org/2009/11/20/xmlhttprequest-spezifikation-abgeschlossen/">XMLHttpRequest: Spezifikation abgeschlossen</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Zumindest <a title="XMLHttpRequest W3C Working Draft 19 November 2009" href="http://www.w3.org/TR/2009/WD-XMLHttpRequest-20091119/" target="_self">laut W³C </a>&#8211; da kann man sich ja freuen, dass das Objekt der AJAX/S-Begierde 10 Jahre nach der Implementation im IE5 endgültig spezifiziert wurde — wenn der <a title="Last Call XMLHttpRequest" href="http://www.w3.org/2005/10/Process-20051014/tr#last-call" target="_self"><em>Last Call</em></a> des W³Cs unbeantwortet bleibt .-)</p>
<p>[ <a title="heise news: W3C: XMLHttpRequest als &quot;Last Call&quot;" href="http://www.heise.de/newsticker/meldung/W3C-XMLHttpRequest-als-Last-Call-865388.html" target="_self">via</a> ] </p>The post <a href="https://nerdpress.org/2009/11/20/xmlhttprequest-spezifikation-abgeschlossen/">XMLHttpRequest: Spezifikation abgeschlossen</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHP debug Ausgaben in Ajax Responses mit FirePHP</title>
		<link>https://nerdpress.org/2009/10/03/php-debug-ausgaben-in-ajax-responses-mit-firephp/</link>
		
		<dc:creator><![CDATA[Max Girkens]]></dc:creator>
		<pubDate>Sat, 03 Oct 2009 10:15:20 +0000</pubDate>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Javascript]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=330</guid>

					<description><![CDATA[<p>eine weitere Supererweiterung für Firebug ist meiner Meinung nach FirePHP. Das Tool ermöglicht PHP (debug)Ausgaben direkt an die Firebug Konsole zu schicken: FB::log(&#039;Log message&#039;); FB::info(&#039;Info message&#039;); FB::warn(&#039;Warn message&#039;); FB::error(&#039;Error message&#039;); installieren lässt sich das Ding beqeum via pear: pear channel-discover pear.firephp.org pear install firephp/FirePHPCore einbinden dann so: // object oriented API require_once(&#039;FirePHPCore/FirePHP.class.php&#039;); $firephp = FirePHP::getInstance(true); &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2009/10/03/php-debug-ausgaben-in-ajax-responses-mit-firephp/" class="more-link">Continue reading<span class="screen-reader-text"> "PHP debug Ausgaben in Ajax Responses mit FirePHP"</span></a></p>
The post <a href="https://nerdpress.org/2009/10/03/php-debug-ausgaben-in-ajax-responses-mit-firephp/">PHP debug Ausgaben in Ajax Responses mit FirePHP</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>eine weitere Supererweiterung für <a href="https://addons.mozilla.org/de/firefox/addon/1843">Firebug</a> ist meiner Meinung nach <a href="http://firephp.org/">FirePHP</a>.</p>
<p><img decoding="async" class="alignnone size-full wp-image-396" title="SimpleConsole" src="https://nerdpress.org/wp-content/uploads/2009/10/SimpleConsole.png" alt="SimpleConsole" width="310" height="151" /></p>
<p>Das Tool ermöglicht PHP (debug)Ausgaben direkt an die Firebug Konsole zu schicken:<span id="more-330"></span></p>
<pre class="brush: php; title: ; notranslate">

FB::log(&#039;Log message&#039;);

FB::info(&#039;Info message&#039;);

FB::warn(&#039;Warn message&#039;);

FB::error(&#039;Error message&#039;);

</pre>
<p>installieren lässt sich das Ding beqeum via pear:</p>
<pre class="brush: bash; title: ; notranslate">

pear channel-discover pear.firephp.org
pear install firephp/FirePHPCore

</pre>
<p>einbinden dann so:</p>
<pre class="brush: php; title: ; notranslate">

// object oriented API
require_once(&#039;FirePHPCore/FirePHP.class.php&#039;);
$firephp = FirePHP::getInstance(true);
$firephp-&gt; *

require_once(&#039;FirePHPCore/fb.php&#039;);
FB:: *

</pre>
<p>dann solche Dinge tun:</p>
<pre class="brush: php; title: ; notranslate">

$firephp-&gt;setEnabled(false);  // or FB::

$firephp-&gt;log(&#039;Plain Message&#039;);     // or FB::
$firephp-&gt;info(&#039;Info Message&#039;);     // or FB::
$firephp-&gt;warn(&#039;Warn Message&#039;);     // or FB::
$firephp-&gt;error(&#039;Error Message&#039;);   // or FB::

</pre>
<p>auch sehr schön. Logging in Tabellenform:</p>
<pre class="brush: php; title: ; notranslate">
$table   = array();
$table&#x5B;] = array(&#039;Col 1 Heading&#039;,&#039;Col 2 Heading&#039;);
$table&#x5B;] = array(&#039;Row 1 Col 1&#039;,&#039;Row 1 Col 2&#039;);
$table&#x5B;] = array(&#039;Row 2 Col 1&#039;,&#039;Row 2 Col 2&#039;);
$table&#x5B;] = array(&#039;Row 3 Col 1&#039;,&#039;Row 3 Col 2&#039;);

$firephp-&gt;table(&#039;Table Label&#039;, $table);  // or FB::

fb($table, &#039;Table Label&#039;, FirePHP::TABLE);
</pre>
<p>oder auch Tracing:</p>
<blockquote><p><strong>Traces</strong><br />
You can send a backtrace showing <em>File</em>, <em>Line</em>, <em>Class</em>, <em>Method</em> and <em>Function</em> information including <em>Arguments</em> to clearly show the execution path up to the point in your code where you triggered the trace.</p></blockquote>
<pre class="brush: php; title: ; notranslate">
$firephp-&gt;trace(&#039;Trace Label&#039;);  // or FB::

fb(&#039;Trace Label&#039;, FirePHP::TRACE);
</pre>
<p>uswusw.</p>
<p>uuund:<br />
Es gibt auch ein <a href="http://www.symfony-project.org/plugins/sfFirePHPPlugin">Symfony Plugin</a> dafür.</p>The post <a href="https://nerdpress.org/2009/10/03/php-debug-ausgaben-in-ajax-responses-mit-firephp/">PHP debug Ausgaben in Ajax Responses mit FirePHP</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>mit Jquery eine Form auslesen und mit Ajax Post versenden</title>
		<link>https://nerdpress.org/2009/10/02/mit-jquery-eine-form-auslesen-und-mit-ajax-post-versenden/</link>
					<comments>https://nerdpress.org/2009/10/02/mit-jquery-eine-form-auslesen-und-mit-ajax-post-versenden/#comments</comments>
		
		<dc:creator><![CDATA[Ivo Bathke]]></dc:creator>
		<pubDate>Fri, 02 Oct 2009 13:40:43 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=338</guid>

					<description><![CDATA[<p>Will man die Values einer Form dynamisch holen und mit Ajax verschicken mit Jquery muss man wohl einiges beachten. Eine gescheite -outthebox- Lösung scheints da nicht zu geben bzw. ich hab sie nicht gefunden. 1. Daten holen Die Daten holt man am besten über die Jquery Methode serializeArray(). var s = $('#campaigns form').serializeArray() Damit holt &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2009/10/02/mit-jquery-eine-form-auslesen-und-mit-ajax-post-versenden/" class="more-link">Continue reading<span class="screen-reader-text"> "mit Jquery eine Form auslesen und mit Ajax Post versenden"</span></a></p>
The post <a href="https://nerdpress.org/2009/10/02/mit-jquery-eine-form-auslesen-und-mit-ajax-post-versenden/">mit Jquery eine Form auslesen und mit Ajax Post versenden</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Will man die Values einer Form dynamisch holen und mit Ajax verschicken mit Jquery<br />
muss man wohl einiges beachten.<br />
Eine gescheite -outthebox- Lösung scheints da nicht zu geben bzw. ich hab sie nicht gefunden.</p>
<p>1. Daten holen<br />
Die Daten holt man am besten über die Jquery Methode serializeArray().</p>
<pre class="brush: jscript; title: ; notranslate">var s = $('#campaigns form').serializeArray()</pre>
<p>Damit holt Jquery alle Values in dieser Form als Array, bei radio oder checkbox types jeweils die aktivierten.</p>
<p>2. Wie versenden?<br />
Nun stellt sich die Frage, wie man die Daten schön aufbereitet und dann versendet.</p>
<p><span id="more-338"></span> Man könnte jeden Value manuell als Parameter angeben, ist aber ein wenig umständlich.<br />
Am besten wäre eine Lösung die das Array in ein JSON String wandelt und damit einen Parameter zu füllen:</p>
<pre class="brush: jscript; title: ; notranslate">vars=JSON</pre>
<p>Auf dem verarbeitetenden Server kann man den dann wieder decodieren und schön auf key:value pairs arbeiten.</p>
<p>Leider kann Jquery das nicht von Haus aus, dafür braucht es einen JSON stringifier.<br />
Den gibts hier: <a href="http://http://json.org/json2.js">http://json.org/json2.js</a> (Update: <a href="https://github.com/douglascrockford/JSON-js">https://github.com/douglascrockford/JSON-js</a>)</p>
<p>Damit gehts dann so:</p>
<pre class="brush: jscript; title: ; notranslate">
$.post(url, {module : &quot;saveCampaign&quot;,vars : JSON.stringify(s)},function(data){
createActvityDoneDiv_(randomId,data);
})
</pre>
<p>Auf dem Server decodiert man das dann:</p>
<pre class="brush: php; title: ; notranslate">$s = json_decode($_POST&#x5B;'vars']);</pre>
<p>&#8230;und man bekommt sowas:</p>
<pre class="brush: php; title: ; notranslate">
&#x5B;0] = stdClass Object
(
&#x5B;name] = Name
&#x5B;value] = asdasdass
)

&#x5B;1] = stdClass Object
(
&#x5B;name] = status
&#x5B;value] = enabled
)
</pre>
<p>Damit kommt ja schon klar auf dem Server<br />
aber ist doch irgendwie ne <span style="text-decoration: line-through;">scheiss</span> Struktur.<br />
So eine will man haben:</p>
<pre class="brush: php; title: ; notranslate">
&#x5B;Name] = asdasdass
&#x5B;status] = enabled
</pre>
<p>Da muss der Client wohl noch was arbeiten:</p>
<pre class="brush: jscript; title: ; notranslate">
var t = {};
s = $('#campaigns form').serializeArray();
jQuery.each(s,function(){
t&#x5B;this.name]=this.value;
});
//und ab
$.post(url, {module : &quot;saveCampaign&quot;,vars : JSON.stringify(t)},function(data){
createActvityDoneDiv_(randomId,data);
})
</pre>
<p>Dann gehts.</p>The post <a href="https://nerdpress.org/2009/10/02/mit-jquery-eine-form-auslesen-und-mit-ajax-post-versenden/">mit Jquery eine Form auslesen und mit Ajax Post versenden</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
					<wfw:commentRss>https://nerdpress.org/2009/10/02/mit-jquery-eine-form-auslesen-und-mit-ajax-post-versenden/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
