2016-04-12 5 views
0

Ich habe dieses Stück Code in PHP (Pfad: ../wp-content/plugins/freework/fw-freework.php)Warum kann ich diese PHP-Datei nicht von jQuery/AJAX aufrufen?

<div id="new-concept-form"> 
     <form method="post" action="../wp-admin/admin.php?page=FreeWorkSlug" class="form-inline" role="form" onsubmit="addNewConcept()"> 
      <div class="form-group"> 
       <label for="new_concept_text">Nuovo concetto:</label> 
       <input type="text" class="form-control" id="new_concept_text"> 
      </div> 
      <div class="form-group"> 
       <label for="new_concept_lang">Lingua:</label> 
       <select class="form-control" id="new_concept_lang"> 
        <option>it</option> 
        <option>en</option> 
        <option>de</option> 
        <option>fr</option> 
       </select> 
      </div> 
      <button type="submit" class="button-aggiungi btn btn-default">Aggiungi</button> 
     </form> 
    </div> 

Wenn die Taste gedrückt wird, diese Javascript aufgerufen wird (es funktioniert wie der Alarm gezeigt wird und die Daten abgerufen werden korrekt):

var ajaxphp = '../wp-content/plugins/freework/fw-ajaxphp.php'; 

function addNewConcept() 
{ 
conceptName = document.getElementById('new_concept_text').value; 
lang = document.getElementById('new_concept_lang').value; 

alert('Inserting: ' + conceptName + " " + lang); 

$.ajax({ 
    type: 'POST', 
    url: ajaxphp, 
    async: true, 
    dataType: 'json', 
    data: {conceptNm : conceptName, conceptLang : lang }, 
    success: function() { 
     alert("-------------------------------- Data sent!!"); 
     console.log("-------------------------------- Data sent!!"); 
    } 

}); 

return true; 
} 

Nun, wie Sie in der JavaScript sehen können, würde Ich mag eine andere PHP-Datei über ajax nennen (die Warnung und die console.log in der Erfolgsfunktion wird nicht aufgerufen/kann nicht erreicht werden).

<?php 
// HTML Page -> JavaScript -> fw-ajaxphp.php -> XML Vocabulary 

echo 'alert("PHP called")'; 
// echo $_POST['conceptNm']; 
// TODO change vocab when done testing 
$xml_file = '../wp-content/plugins/freework/fw-custom-vocabulary-test.xml'; 

$xml_vocab = new DOMDocument; 
if (isset($_POST['conceptNm']) && isset($_POST['conceptLang'])) 
{ 
    // ADD NEW CONCEPT 
    echo 'alert("PHP chiamato")'; 
    // irrelevant business code here... 
    echo 'alert("Modifica avvenuta")'; 
} 
?> 

JQuery/Bootstrapp ecc ... sind alle sowohl in der Master-HTML-Datei enthalten und in der HTML-Generator PHP-Datei (richtig funktioniert).

Noch kann ich nicht scheinen, diese php-Datei zu nennen, die die ganze Serverlogik als Antwort auf den Knopf hält. Der Geschäftscode ist irrelevant, da der Button-Trigger die Warnung zumindest außerhalb der if-Bedingung aufrufen sollte. Ich habe alle Antworten auf Stack-Overflow in Bezug auf dieses Problem verfolgt, aber es funktioniert nicht. Ich habe auch versucht, den Variablen den vollständigen Pfad hinzuzufügen, aber nichts. Wie Sie sehen können, befinden sich alle meine Dateien in diesem Ordner: Files on Server. Warum kann ich das serverseitige PHP-Skript nicht aufrufen? Danke.

EDIT: Ich löste das mit einem völlig neuen Ansatz! Ich lasse jQuery weg, ich werde die Seite jedes Mal aufladen, wenn jemand das Formular einreicht, und ich werde die Daten durch POST in der gleichen Datei abrufen, die das HTML erzeugt. Warum kann ich den Server nicht von Javascript aus aufrufen? Offen gesagt, ich weiß es nicht. In anderen Fällen hat es immer funktioniert. Danke euch allen trotzdem.

+0

Sollte die Ajaxphp nicht '' ./wp-content/plugins/freework/fw-ajaxphp.php '; '? –

+2

Was passiert, wenn Sie dies debuggen? Wird der AJAX-Anruf überhaupt getätigt? Wie lautet die Antwort des Servers? – David

+0

@MattWebb das ist eine Variable, die den Pfad enthält. Marko, hast du irgendetwas in der Antwort? Überprüfen Sie von der Konsole aus. – DevDonkey

Antwort

4

Das ist Ihr Problem:

$.ajax({ 
    type: 'POST', 
    url: ajaxphp, 
    async: true, 
    dataType: 'json', 
    ^^^^^^^^^^^^^^^^ Wrong data type 

Dann Sie tun:

<?php 
// HTML Page -> JavaScript -> fw-ajaxphp.php -> XML Vocabulary 

echo 'alert("PHP called")'; 
... 

Sie angeben, dass die zurückgegebenen Daten Typ json ist. In Ihrem PHP-Skript gibt es jedoch ein Echo für Strings, sodass Ihr Ajax-Aufruf fehlschlägt, da jQuery die zurückgegebenen Daten nicht als JSON analysieren kann.

Das Entfernen der dataType Zeile sollte Ihr Problem lösen, aber beachten Sie, dass Sie die zurückgegebenen Daten dann nicht als Objekt verwenden können. Aber das sollte in diesem speziellen Beispiel keine Rolle spielen, da Sie die zurückgegebenen Daten überhaupt nicht verwenden.

+0

In diesem Fall spielt es keine Rolle, da er das zurückgegebene PHP nicht mit der 'success()' Methode behandelt. – Marcus

+0

@Marcus Das ist irrelevant, jQuery wird immer noch versuchen, das Ergebnis zu analysieren, wenn der Datentyp angegeben wird. – jeroen

+0

Nein, das war nicht das Problem. Wie auch immer, ich habe das gelöst, indem ich einen völlig neuen Ansatz benutzt habe, wie Sie in meiner Antwort sehen (oder bald werden). Ich danke dir trotzdem. –

Verwandte Themen