Variable aus javascript an php übergeben


Sempervivum

Erfahrenes Mitglied
#21
Dann ist Debuggen angesagt. Bist Du mit dem Debugger deines Browsers vertraut? Wenn nicht, zunächst Konsolausgaben verwenden. Eine ist ja schon im onreadystatechange-Callback drin (console.log). Außerdem würde ich eine für die Parameter einbauen:
Code:
        var data = "firma=" + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + "&nachname=" + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME");
console.log(data);
 

Sempervivum

Erfahrenes Mitglied
#23
Du kannst z. B. hier nachlesen, wo Du sie findest:
https://wiki.selfhtml.org/wiki/JavaScript/Tutorials/Debuggen_für_Anfänger
Ich habe das JS übrigens bei mir getestet und es hat funktioniert. Mit festen Parametern:
Code:
        var data = "firma=die-firma&nachname=mustermann";
        var xhr = new XMLHttpRequest();
        var url = "testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        };
        xhr.send(data);
    </script>
 

Sempervivum

Erfahrenes Mitglied
#24
Und lösche die HTML-Kommentare in deinem Javascript:
Code:
<!--
                //-->
Du schreibst zwar, dass dieser Block funktioniert, aber bei mir erkennt der Interpreter sie als Fehler.
 
#25
Das habe ich gefunden
Code:
Synchrone XMLHttpRequests am Haupt-Thread sollte nicht mehr verwendet werden, weil es nachteilige Effekte für das Erlebnis der Endbenutzer hat. Für weitere Hilfe siehe http://xhr.spec.whatwg.org/
smjslib.js:1:6866
SyntaxError: missing ) after condition[Weitere Informationen]
bestellung-erfolgreich-gesendet.php:179:41
INIT: 2ms
bestellung-erfolgreich-gesendet.php:254:1
CSI/tbsd_
cb=gapi.loaded_0:256:127
CSI/_tbnd
 

Sempervivum

Erfahrenes Mitglied
#28
In Javascript darfst Du keine HTML-Kodierungen verwenden. Ersetze sie durch das einfache Zeichen:
Code:
if (xhr.readyState === 4 && xhr.status === 200) {
if (xhr.readyState === 4 &amp;&amp; xhr.status === 200) {
Oder hat das die Forensoftware gemacht, Du hast ja keine Code-Tags verwendet? Oder dein Editor?
 

Sempervivum

Erfahrenes Mitglied
#29
PS: Offenbar die Forensoftware. Du musst Codetags verwenden, wenn Du Code postest. Diese Zeile allein ist OK. Poste noch Mal das vollständige JS, der Fehler muss irgend wo anders liegen.
 
#30
Code:
<script type="text/javascript">
           

            var sBestelldaten = ''
              + 'Firma: ' + SMShop.getFormValue("BILLTO", "BILLTO_COMPANY") + '<br>'
                + 'Email: ' + SMShop.getFormValue("BILLTO", "BILLTO_EMAIL") + '<br>'
                + 'Vorname: ' + SMShop.getFormValue("BILLTO", "BILLTO_FIRSTNAME") + '<br>'
                + 'Nachname: ' + SMShop.getFormValue("BILLTO", "BILLTO_LASTNAME") + '<br>'
                + 'Bestellnummer: ' + SMShop.getAttribute(_SMAMailOrderID) + '<br>';
                document.write(sBestelldaten);
           
            </script>
    <span id="ausgabe1"></span>       
                <script>
                var data = "firma=die-firma&nachname=mustermann";

               console.log(data);
        var xhr = new XMLHttpRequest();
        var url = "brokerdatei/testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
               xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                document.getElementById("ausgabe1").innerHTML = xhr.responseText;
            }
        };
        xhr.send(data);
    
    </script>
 

Sempervivum

Erfahrenes Mitglied
#31
Das funktioniert auf meiner Testseite einwandfrei. Du hast doch geschrieben, dass Du es auf dem Webserver hast. Dann poste doch mal die URL.
 
#34
Hallo Sempervivum,
vielen, vielen Dank für den Support, es funktioniert es so wie ich es mir gedacht hatte.
Eins muss ich noch los werden, Du hast dir unwahrscheinlich viel Mühe gegeben, das ist nicht selbstverständlich. Dafür 1000 Dank
 
#36
Hi, bin neu hier, und ich habe ähnliches Problem. Ich will mit JS ein Befehl oder Variable an PHP senden.
Und hab folgendes vor will Textarea CKEditor in eine DB speichern, ohne dabei die Webseite neu zu laden, leider klappt das nicht.

Das senden via JS funktioniert eigentlich, kann das unter Konsole XHR sehen:

Code:
XHR POST http://192.168.1.44/www/index.php?module=reparaturauftrag&action=edit&id=86
[HTTP/1.1 200 OK 273ms]

       meine.js:95:17
4     meine.js:96:5
200 meine.js:97:5
       meine.js:98:5
postbefehl=tech_zustand
was ich festgestellt habe sind die beiden leer, haben doch gleiche Bedeutung oder:
console.log(xhr.response);
console.log(xhr.responseText);

hier meine.js:
Javascript:
function sendRequest(id, befehl)
{
        var data = "postbefehl=" + befehl;
        var xhr = new XMLHttpRequest();
        var url = "index.php?module=reparaturauftrag&action=edit&id=" + id;
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onload = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                console.log(xhr.readyState);
                console.log(xhr.status);
                console.log(xhr.response);
                console.log(data);
                //div_tech_zustand.innerHTML = xhr.responseText;
            }
        };

        xhr.send(data);
}

Diesen postbefehl will ich in PHP empfangen, und hier klappt bei mir leider nicht:
reparaturauftrag.php:
PHP:
?>
<?php
include ("_gen/reparaturauftrag.php");
//require_once("Payment/DTA.php"); //PEAR

class Reparaturauftrag extends GenReparaturauftrag
{

  function __construct(&$app, $intern = false)
  {
    $this->app=&$app;
    if($intern)return false;

    $this->app->ActionHandlerInit($this);
    $this->app->ActionHandler("list","ReparaturauftragList");
    $this->app->ActionHandler("create","ReparaturauftragCreate");
    $this->app->ActionHandler("positionen","ReparaturauftragPositionen");
    $this->app->ActionHandler("addposition","ReparaturauftragAddPosition");
     
      ...
    $this->app->ActionHandler("edit","ReparaturauftragEdit"); // Hier der Sprung bei "index.php?module=reparaturauftrag&action=edit&id=86"
      ....
         
         
         
function ReparaturauftragEdit()
  {
...
   
    $this->app->Tpl->SET('JSSCRIPTS','<script type="text/javascript" src="./js/meine.js"></script>');  
    $this->app->Tpl->Add('JAVASCRIPT',"CKEDITOR.on('instanceReady', function(){ set_visibility('tech_zustand');});");
   
    $this->app->Tpl->SET('SAVE_TEXT_TECH_ZUSTAND',"<img src=\"themes/new/images/save.png\" alt=\"Bild\" onclick=\"toggle('tech_zustand'); sendRequest($id, 'tech_zustand');\">");    
         
...  
   
    // klappt leider nicht
    if(isset($_POST['postbefehl'])){
   die;
   
   // das auch nicht
    $msg = $this->app->Secure->GetPOST("postbefehl");
    if($msg=="tech_zustand") die;
       
       
}
}
Wo ist mein Denkfehler, kann mir das einer sagen, Danke.
 
#37
Hat keiner eine Idee? Ich bin leider in PHP und JS nicht fit, komm aus embedded Soft- & Hardware Bereich.
Das System ist CRM und ist nicht von mir, will nur ein Modul schreiben und dabei noch was lernen:)


Hier noch eine JS Funktion, die auch ohne Probleme sendet:
Javascript:
function clickJStoPHP(befehl){
   // Daten an Server senden
   $.ajax({
   // pfad zur PHP Datei (ab HTML Datei)
        url: "index.php?module=reparaturauftrag&action=edit&id=86",
   // Daten, die an Server gesendet werden soll in JSON Notation
        data: {postbefehl: "mach_was"},
        dataType: "json",
   // Methode POST oder GET
   type: "POST",
   // Callback-Funktion, die nach der Antwort des Servers ausgefuehrt wird
        success: function(data) { }
   });
}
Also JS sendet das sehe ich auch, nur ich empfange nichts an PHP (Server seitig) woran kann das liegen?