2017-11-27 5 views
0

Ich habe eine sehr einfache jQuery-Funktion, die einen AJAX-Aufruf an eine PHP-Datei sendet, die eine Warnung aussprechen sollte, aber für das Leben von mir, kann es nicht ausgeführt werden. Im Moment versuche ich einfach, den PHP zu starten. Hier ist die javascript:AJAX-Anfrage ist erfolgreich, aber PHP läuft nicht

function getObdDescription(){ 

    var $code = document.getElementById("vehicle_obd_code").value; 
    var $length = $code.length; 


    if($length == 5){ 
     window.confirm($length); 

     $.ajax({ url: '/new.php', 
      data: {action: 'test'}, 
      type: 'post', 
      success:function(result)//we got the response 
      { 
      alert('Successfully called'); 
      }, 
      error:function(exception){alert('Exception:'+exception);} 
     }); 
     } 
    return false; 
} 

Hier ist new.php

<?php 
    echo '<script language="javascript">'; 
    echo 'alert("message successfully sent")'; 
    echo '</script>'; 
?> 

ich in Chrome testen, und die Registerkarte Netzwerk müssen, und können sehen, dass der Aufruf erfolgreich ist, als auch, Ich bekomme die Meldung "Erfolgreich angerufen", die erscheint, so dass die Jquery ausgeführt wird und der Ajax-Aufruf erfolgreich ist. Ich weiß auch, dass die url: '/new.php korrekt ist, denn wenn ich new.php von meinem Server lösche, bekomme ich einen Status "404 (nicht gefunden)" von der Konsole und Netzwerk Registerkarte. Ich habe sogar ohne die bedingten if($length ==... getestet und immer noch kein Glück. Natürlich weiß ich, dass das nicht das Problem ist, denn ich bekomme die Antwort 'Erfolgreich gewählt'. Irgendwelche Ideen?

+0

Also in einem Server-Skript schreiben Sie ein Client-Skript? –

+3

Dieses Skript wird nicht selbst ausgeführt ... es ist einfach eine Textzeichenfolge, die in 'result' verfügbar ist. Browser weiß nichts über das Ausführen, weil es nicht in der Dom – charlietfl

+0

Dies wird nicht passieren, wie Sie es tun –

Antwort

6

Dieses ist nicht so, wie es funktioniert, wenn Sie den Text alert benötigen, können Sie es auf dem Front-End in Ihrer ajax success Funktion folgen KISS (Simple Stupid Keep It) tun sollten, und in der php Echo nur den Text . Das ist der richtige Weg.

Sie sollten dies tun:

function getObdDescription(){ 

     var $code = document.getElementById("vehicle_obd_code").value; 
     var $length = $code.length; 


     if($length == 5){ 
      window.confirm($length); 

      $.ajax({ url: '/new.php', 
       data: {action: 'test'}, 
       type: 'post', 
       success:function(result)//we got the response 
       { 
       alert(result); 
       }, 
       error:function(exception){alert('Exception:'+exception);} 
      }); 
      } 
     return false; 
    } 

In Ihrer PHP-

<?php 
    echo 'message successfully sent'; 
?> 
0

Sie sind genau richtig Mohammed. Es würde nicht so funktionieren, wie ich es erwartet hatte. Ich habe nicht wirklich versucht, einen Ajax-Anruf zu machen, sondern nur um eine Alarmbox zu bekommen; Ich wollte nur bestätigen, dass der Anruf funktionierte und das PHP lief. Das alert('Successfully called'); zu alert(result); zu ändern und den Text vom php zu lesen bestätigte definitiv, dass das PHP die ganze Zeit lief.

Ich möchte am Thema bleiben, so wird ein anderes Thema, wenn das ist, was benötigt wird, aber haben eine Follow-up-Frage. Um ein bisschen mehr darüber zu machen, was ich versuche, versuche ich eine Funktion in meiner PHP-Datei auszuführen, die wiederum eine Template-Variable aktualisiert. Als Beispiel, hier ist eine solche Funktion:

function get_vehicle_makes() 
{ 
    $sql = 'SELECT DISTINCT make FROM phpbb_vehicles 
      WHERE year = ' . $select_vehicle_year; 

    $result = $db->sql_query($sql); 

    while($row = $db->sql_fetchrow($result)) 
    { 
     $template->assign_block_vars('vehicle_makes', array(
      'MAKE' => $row['make'], 
     )); 
    } 
    $db->sql_freeresult($result); 
} 

Jetzt weiß ich, dass diese Funktion funktioniert. Ich kann dann Zugriff auf diese Funktion in meinem Javascript mit:

<!-- BEGIN vehicle_makes --> 
     var option = document.createElement("option"); 
     option.text = ('{vehicle_makes.MAKE}'); 
     makeSelect.add(option); 
<!-- END vehicle_makes --> 

Dies ist eine Blockschleife und wird Schleife durch den Block Variablensatz in der PHP-Funktion. Dies funktioniert beim Laden der Seite, weil die Seite, die geladen wird, die new.php ist, mit der ich versuche, einen Ajax-Aufruf auszuführen, und alle PHP-Dateien werden beim Laden in dieser Datei ausgeführt. Allerdings muss ich die Funktion erneut ausführen, um diese Blockvariable zu aktualisieren, da sie sich aufgrund einer Auswahländerung im HTML ändern wird. Ich weiß nicht, ob diese Art von Blockschleife üblich ist. Ich lerne über sie, da sie mit einem Forum verwendet werden, das ich auf meiner Website phpBB installiert habe. (Ich habe in ihren Support-Foren nach Hilfe gesucht.). Ich denke, eine andere mögliche Lösung wäre, ein Array zurückzugeben, aber ich würde gerne an der Blockvariable bleiben, wenn es aus Konsistenzgründen möglich wäre.

ich diese Bedingung bin mit und schalten Sie die Funktion aufzurufen:

if(isset($_POST['action']) && !empty($_POST['action'])) { 
    $action = $_POST['action']; 

    //Get vehicle vars - $select_vehicle_model is used right now, but what the heck. 
    $select_vehicle_year = utf8_normalize_nfc(request_var('vehicle_year', '', true)); 
    $select_vehicle_make = utf8_normalize_nfc(request_var('vehicle_make', '', true)); 
    $select_vehicle_model = utf8_normalize_nfc(request_var('vehicle_model', '', true)); 

    switch($action) { 
    case 'get_vehicle_makes' : 
     get_vehicle_makes(); 
     break; 
    case 'get_vehicle_models' : 
     get_vehicle_models(); 
     break; 
    // ...etc... 
    } 
} 

Und das ist das Javascript, um die Ajax auszuführen:

function updateMakes(pageLoaded) { 
    var yearSelect = document.getElementById("vehicle_year"); 
    var makeSelect = document.getElementById("vehicle_make"); 
    var modelSelect = document.getElementById("vehicle_model"); 

    $('#vehicle_make').html(''); 

    $.ajax({ url: '/posting.php', 
      data: {action: 'get_vehicle_makes'}, 
      type: 'post', 
      success:function(result)//we got the response 
      { 
      alert(result); 
      }, 
      error:function(exception){alert('Exception:'+exception);} 
    }); 
    <!-- BEGIN vehicle_makes --> 
     var option = document.createElement("option"); 
     option.text = ('{vehicle_makes.MAKE}'); 
     makeSelect.add(option); 
    <!-- END vehicle_makes --> 

    if(pageLoaded){ 
     makeSelect.value='{VEHICLE_MAKE}{DRAFT_VEHICLE_MAKE}'; 
     updateModels(true); 
    }else{ 
     makeSelect.selectedIndex = -1; 
     updateModels(false); 
    } 
} 

Die Javascript läuft, und die AJAX erfolgreich sein. Es scheint, dass die Blockvariable nicht gesetzt ist.

+0

Sie könnten eine neue Frage zu diesem –

+0

Thanks. Neue Frage hier hinzugefügt: https://stackoverflow.com/questions/47517190/run-php-function-using-ajax-to-update-phpb-template-variable – Jordan

Verwandte Themen