ajax Origin null is not allowed by Access-Control-Allow-Origin

Für mobile JS-Applikationen ist es meist erforderlich, die Anfragen direkt per Ajax an einen externen Ziel-Server zu schicken.

In der bisherigen Entwicklung erhielt man in Chrome folgende Meldung

XMLHttpRequest cannot load . Origin null is not allowed by Access-Control-Allow-Origin.

Im Firefox Firebug bekam ich keine Nachricht.

Nachdem ich auf die Dokumentation von Mozilla kam, probierte ich ein wenig mit Response Object herum und folgende, funktionierende Lösung kam heraus

// Headerinformationen, um Ajaxanfragen direkt zu ermöglichen
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
context.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
context.Response.AddHeader("Access-Control-Allow-Headers", "*");

Dies sollte dann wirklich nur an öffentlichen Webservices gemacht werden!

In PHP sieht das ganz dann so aus:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods", "POST, GET, OPTIONS');
header('Access-Control-Allow-Headers *');

Related Posts:

Zend_Search_Lucene – Suche nach Zahlen

Wenn man bei der Standardsuche von Zend_Search_Lucene nach Zahlen sucht, bekommt man eine Exception

// Suche nach z.B.: 12345
Application error
 
Exception information:
 
Message: At least 3 non-wildcard characters are required at the beginning of pattern.
 
Stack trace:
...

Das Problem ist, das der Standard Zend_Search_Lucene_Analysis_Analyzer keine Numeric Werte mit aufnimmt.

Abhilfe schafft es, den Analyzer beim parsen einfach neu zu setzen

Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive()
);

Dann sollte es auch mit der Suche nach Zahlen klappen.

Die Lösung kommt vom ZF Issue Tracker

Related Posts:

Zend Studio 7.2 – Autovervollständigung geht nicht mehr

Zend Studio 7.2 ist die kostenpflichtige IDE, wenn es um PHP-Entwicklung geht. Aus einem unbekannten Grund funktionierte meine Autovervollständigung nicht mehr.

Die Lösung habe ich in diesem Blog und dadurch auch in diesem Forum gefunden.

Man geht in seinen Workspace

# Bsp: windows 7, Standardworkspace
C:\Users\<euer_user>\Zend\workspaces\DefaultWorkspace7\.metadata\.plugins\org.eclipse.core.runtime\.settings
</euer_user>

und löscht die Datei

org.eclipse.dltk.ui.prefs

Danach Zend Studio neu starten, und die Autovervollständigung funktioniert wieder.

Related Posts:

TYPO3 4.3 – Frontendediting aktivieren

Mit der aktuellen Version 4.3.x ist das neue Frontendediting gekommen. Um in den Genuss zu kommen, muss man dies erst aktivieren.

Folgende Schritte sind dafür notwendig:

Installieren und aktivieren der Extension feeditadvanced
Aktivieren des Plugins über die TSConfig:

admPanel {
  enable.edit=1
  module.edit.forceDisplayFieldIcons=1
  hide=1
}

Related Posts:

ZendFramework – Eindeutigen Datensatz prüfen

Das Zend Framework bietet mit seinen Validatoren sehr schöne Möglichkeiten, die Daten des Benutzers zu prüfen. Bisher habe ich immer im Controller geprüft, ob es einen Datensatz schon einmal gibt, wie z.B.: E-Mail Adresse, oder Benutzername. Doch es geht noch viel einfacher. Das ZendFramework bietet dafür die Klasse Zend_Validate_Db_NoRecordExists an. Diese erbt von der abstrakten Klasse Zend_Validate_Db_Abstract. Als Parameter gibt man in diesem Beispiel die Tabelle und die zu prüfende Spalte an.

Hier ein Beispiel der Benutzung in der Formklasse eureres Moduls

 
class User_Form_Register extends Zend_Form
{
    /**
     * Init the Registerform
     *
     * @return void
     */
    public function init()
    {
 
        $this->setAttrib('id', 'registerform');
        $this->setAction('/user/index/create');
 
        // ...
 
        // username
        $dbValUnique = new Zend_Validate_Db_NoRecordExists('user', 'username'); // Das DB ValidatorObjekt
        $username = new Zend_Form_Element_Text('username');
        $username->setLabel('Benutzername');
        $username->setRequired();
        $username->addValidator('regex', true, array('/^[a-z]/i'));
        $username->addValidator($dbValUnique); // Hinzufügen zum Element
 
        $this->addElement($username);
 
 
        // ...
 
 
        // e-mail
        $dbValUnique = new Zend_Validate_Db_NoRecordExists('user', 'email'); // Das DB ValidatorObjekt
        $email = new Zend_Form_Element_Text('email');
        $email->setLabel('E-Mail');
        $email->setRequired();
        $email->addValidator(new Zend_Validate_EmailAddress());
        $email->addValidator($dbValUnique); // Hinzufügen zum Element
 
        $this->addElement($email);
 
        // ...
 
    }
}

Related Posts:

Singleton Muster

Das Singleton Muster (Singleton Pattern) ist ein Entwurfsmuster in der Sofwareentwickung, welches beschreibt, das man ein Objekt nur einmal instanziieren darf.

Was genau wird realisiert?

Der Konstruktor des Objektes wird auf private gesetzt. Dies hat zur Folge, das man keine Instanz mit dem new Operator erstellen kann. Danach wird eine statische Methode erstellt, die eine neue Instanz des Objektes zurück gibt. In dieser Methode wird überprüft, ob es schon eine Instanz gibt, anhand einer statischen Membervariable. Das wars. Eingesetzt wird dies unter anderem bei Winforms, damit man ein Fenster nicht mehrfach erzeugen kann.

class Singleton
{
        /**
         * @var Singeleton
         */
	private static $_instance;
 
        /**
         * Kontruktor MUSS logischerweise auf private gesetzt werden
         */
	private function __construct() { /* beliebiger CODE */ }
 
        /**
         * @return Singleton
         */
	public function getInstance() {
		if (self::$_instance == null || !(self::$_instance instanceof Singeleton)) {
			self::$_instance = new Singleton();
		}
		return self::$_instance;
	}
}
 
// aufruf
$mySingletonOnject = Singleton->getInstance();

Quelle: Wikipedia DE

// Nur zur Veranschaulichung – bitte nicht verwenden!
sealed class Singleton
{
    private Singleton() { /* beliebiger CODE im Kontruktor */ }
    private static Singleton _instance = null;
 
    public static Singleton getInstance()
    {
       if(_instance == null) {
          _instance = new Singleton();
       }
       return _instance;
    }
}
 
// Diese Version verwenden, wegen der ThreadSicherheit
sealed class Singleton
{
    private Singleton() { /* beliebiger CODE */ }
    private static volatile Singleton _instance = null;
 
    public static Singleton getInstance()
    {
       // DoubleLock
       if(_instance == null) {
          lock(m_lock) {
              if (_instance == null) {
                  _instance = new Singleton();
              }
          }
       }
       return _instance;
    }
 
    // Hilfsfeld für eine sichere Threadsynchronisierung
    private static object m_lock = new object();
}
 
// Zugriff über Singleton 
Singleton MySingletonObject = Singleton.getInstance();

Für weitere Informationen zu Singleton oder weiteren Design Pattern empfehle ich folgende Links

Edit: eine erweiterte Variante, basieren auf Dirk Primbs Post

sealed class Singleton
{
    // > c# 2008 - Hier wird eine statische Variable erzeugt, die mit 
    // volatile => Threadsafe
    // readonly => mit dem Schlüsselwort stellen wir sicher, das keine neue Instanz erzeugt wird
    public static readonly volatile Singleton Instance = new Singleton();
 
    public string Name {get; set; }
 
    // Konstruktor auf private
    private Singleton() { /* beliebiger CODE */ }
 
}
 
 
// Testing
var x = Singleton.Instance;
x.Name = "Hans";
 
var y = Singleton.Instance;
y.Name = "Werner";
 
// Beide Ausgaben ergeben Werner, weil es nur eine Instanz des Objektes zurückgegeben wird
Console.WriteLine("X: " + x.Name);
Console.WriteLine("Y: " + y.Name);
Console.ReadLine();

Related Posts:

My Tools

Um das arbeiten am PC zu vereinfachen, gibt es ja eine Menge Tools. Welche ich einsetze, von denen ich bisher überzeugt bin, möchte ich euch nicht vor enthalten:

IDE:

Vielleicht kennt ja der ein oder andere einige noch nicht.

Empfehlungen von euch:

  • UltraMon (Multiple Monitore handeln) UltraMon

Related Posts: