2009-07-20 4 views
2

Ich habe eine interaktive Web-Anwendung mit jQuery, wo Benutzer visuelle Objekte auf dem Bildschirm manipulieren können. Danach sollte der "Status" der JavaScript-Objekte an PHP gesendet werden, um sie in der Datenbank zu speichern. Ich würde lieber GET für diese verwenden, aber eine Lösung, die POST verwendet, um die Daten zu übermitteln, ist ebenfalls praktikabel.Was ist der beste Weg, JavaScript-Array mit GET zu PHP-Skript zu senden?

ich derzeit denke alle JS Objekte Codierung mit so etwas wie base64 serialisiert wird und wie etwas verwenden:

var str = encode_objects(); 
document.location = 'result.php?result='+str; 

Allerdings sagt mir etwas hat es einig, elegante, Art und Weise sein, als das Schreiben meiner eigene base64-Encoding-Funktion in JavaScript. Ist nicht schon etwas in JavaScript eingebaut, das den Job erledigen kann?

Update: Decodierung in PHP ist nicht das Problem. Ich weiß, wie man base64, JSON, was auch immer in PHP dekodiert. Das Problem besteht darin, wie Daten auf JavaScript-Seite codiert werden.

AJAX kommt nicht in Frage. Es muss ein sauberes GET oder POST mit erneutem Laden der Seite sein.

Antwort

7

json_decode() sollten Sie auch hier dienen.

Wenn Sie einfach einen String mit der JSON-Repräsentation Ihres JavaScript-Objekts an Ihre HTTP-Anfrage anhängen, können Sie json_decode() in PHP verwenden und ein PHP-Objekt bereithalten.

Edit: Ich sollte erwähnen, dass this page hat einen Link zu einem Javascript JSON Stringifier, der Ihre JS-Objekte in die notwendigen JSON konvertieren wird.

3

zunächst, wenn Sie den Zustand der Objekte aktualisieren, sollte es ein POST sein. Versuche, all dein GET-Idempotent zu halten.

Zweitens, auch wenn Sie kein AJAX machen wollen, ist JSON immer noch Ihr Freund. Der einfachste Weg wäre, Ihre Objekte in JSON zu serialisieren und die resultierende Zeichenfolge in das POST-Datenverzeichnis zu senden. Es gibt viele Möglichkeiten, JSON in PHP zu dekodieren, und Sie sind fertig.

+0

Wenigstens json_decode (seit PHP 5.2); Zend_Json kann auch als eigenständige Komponente verwendet werden (ich habe es auf einem PHP 5.1 Server verwendet) –

+0

@Milam, json_decode() oder Zend_Json :: decode()/ –

+0

http://gggeek.altervista.org/sw/article_20061113 .html – Ben

1

GET oder POST wird wahrscheinlich von der Größe Ihrer Daten abhängen: Es gibt eine Grenze für die Menge der Daten, die Sie durch GET (etwa 2000 Bytes; mehr, je nach Browser) passieren können.

Es gibt noch eine andere Sache zu beachten: Wenn Sie Daten ändern, sollten Sie POST verwenden; nicht GET, was verwendet wird, um ... Daten zu erhalten.

Über das Format, würde ich wirklich nicht für etwas wie eine benutzerdefinierte Funktion gehen irgendwelche Sachen wie base64 gehen: Ich würde definitiv für JSON gehen, die eine native Javascript-Notation ist.

Sie können zum Beispiel einen Blick auf:

Es gibt viele JS-Bibliotheken, die JSON erzeugen kann (wahrscheinlich jeder JS-Framework kann, und es gibt standlone Bibliotheken wie this one); und seit PHP 5.2 gibt es Funktionen in PHP zu kodieren/zu decodieren (siehe json_encode und json_decode)

+0

Ich weiß alles über JSON. Aber "viele Bibliotheken" ist nicht die Antwort, die ich mir angesehen habe. Bitte nennen Sie einen Beton, den Sie verwenden. –

+0

Ich verwende normalerweise Prototype als JS Framework, was mir mehr als "nur" JSON Unterstützung bringt (siehe http://www.prototypejs.org/learn/json für einige Erklärungen dazu). Ich habe auch mit jQuery gearbeitet, und es ist toJSON Plugin (siehe http://docs.jquery.com/Plugins). –

0

Ich habe Jquery/JSON verwendet.

var jsonArray = $.toJSON(jsArray); 

schickte sie dann über JQuery/Ajax

1

Wenn es nur ein einfaches, flaches Array ist, müssen Sie nichts Besonderes machen, da PHP ein eingebautes Feature zu parse array syntax von GET/POST Variablennamen hat. Grobes Beispiel unten.

Javascript side:

// Do the parameter-building however you want, I picked the short/messy way 
var arrayvalues = [1, 2, 'a']; 
var querystring = "var[]=" + arrayvalues.join("&var[]="); 
querystring += "&var[something]=abcdef"; 
// querystring is now "var[]=1&var[]=2&var[]=a&var[something]=abcdef" 

PHP side:

var_dump($_POST); 
// Remember to validate the data properly! 
if (is_array($_POST['var'])) { 
    count($_POST['var']); 
    echo $_POST['var']['something']; 
    array_map('do_something_interesting', $_POST['var']); 
} 
+0

Ich mag diese Lösung, aber gibt es irgendeine JavaScript-Bibliothek, um komplexe JavaScript-Objekte/-Arrays in solche assoziativen PHP-Arrays zu codieren? – xmedeko

+1

@xmedeko: Der offensichtlichste Weg ist, 'JSON.stringify()' es im Browser und verwenden Sie pecl-json, um diese Zeichenfolge in ein PHP-Array zu analysieren. Dies ist wahrscheinlich eine bessere Idee im Allgemeinen, da es PHP-Warzen nicht über Ihre URLs hinweg lässt. – flussence

Verwandte Themen