2017-08-11 4 views
1

Bär mit mir Ich bin mein Javascript ist ein wenig eingerostet. Ich versuche also, einen Aufruf von Ajax zu einer PHP - Datei zu verwenden und ihm einen Plan - Typ zu geben, der dann Sinn macht, um zu sehen, ob er dann einen Wahr - oder Falsch - Wert zurückgibt, wenn einige erlaubte Plätze weniger als einige belegte Plätze sind planen. Hier ist das Formular in XHTML.Ajax funktioniert nicht richtig

<form method="post" action="/membership-change-success" id="PaymentForm"> 
    <input type="hidden" name="planChosen" id="planChosen" value="" /> 
</form> 

In derselben Datei. Die (< PLANAUSWAHL>) wird in den aktuellen Plan zerlegt.

<script> 
    var hash = window.location.hash; 
    var currentPlan = "(< PLAN CHOICE >)"; 
    $(".planChoice").click(function(event){ 
      var isGood=confirm('Are you sure you want to change your plan?'); 
      var success; 
      $("#planChosen").val($(this).data("plan")); 
      $.ajax({ 
       url: '/ajax/planCheck.php', 
       type: "POST", 
       dataType: 'json', 
       data: ({plan: $(this).data("plan")}), 
       success: function (data) { //This is what is not working I can't get it to return true 
        success = data; 
       } 
      }); 
      if(success) { 
       if (isGood) { 
        $("#PaymentForm").submit(); 
       } 
       window.location = '/membership-change-success'; 
      } else { 
       alert('Please make sure you deactivate your listings to the appropriate amount before you Downgrade.') 
      } 
     }); 

Mein PHP für die Ajax-Antwort sieht so aus.

<?php 

require ('../includes/common.php'); 
include_once ('../includes/db-common.php'); 
require ('../includes/config.php'); 

$membership = new membership($dbobject); 
$listing = new listing($dbobject); 
$totalAvailableListings = ($membership->get_listingsAmount($_POST['plan'])); 
if($totalAvailableListings>=$listing->get_active_listings($user->id)){ 
    echo json_encode(true); // I've tried with out jason_encode too 
} else { 
    echo json_encode(false); 
} 

Und das ist so ziemlich es, wenn Sie irgendwelche Vorschläge haben, lass es mich wissen.

Also habe ich versucht, es auf eine andere Weise zu tun.

 $(".planChoice").click(function (event) { 
      var isGood = confirm('Are you sure you want to change your plan?'); 
      var success; 

      $("#planChosen").val($(this).data("plan")); 
      if (false) { 
       if (isGood) { 
        $("#PaymentForm").submit(); 
        alert('you did it'); 
       } 
      } else { 
       alert(isSuccessful($(this).data("plan"))); 
       //alert('Please make sure you deactivate your listings to the appropriate amount before you downgrade.'); 
      } 
     }); 

und ich habe eine Ajax-Funktion

function isSuccessful(plan) { 
     return $.ajax({ 
      url: '/ajax/planCheck.php', 
      type: "POST", 
      dataType: 'json', 
      data: {plan: plan} 
     }); 
    } 

Die Warnung sagt mir dieses [Objekt XMLHttpRequest]

irgendwelche Vorschläge?

+0

Also, was ist dein Problem? – epascarello

+3

'Erfolg: Erfolg = Daten' ist falsch Sie sollten einen Rückruf haben, der – epascarello

+0

https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – epascarello

Antwort

3

$.ajax() gibt Ergebnisse asynchron zurück. Verwenden .then()-$.ajax() Anruf gekettet Aufgabe auszuführen, basierend auf Antwort

 $.ajax({ 
      url: '/ajax/planCheck.php', 
      type: "POST", 
      dataType: 'json', 
      data: {plan: $(this).data("plan")} 
     }) 
     .then(function(success) { 
      if (success) { 
       $("#PaymentForm").submit(); 
      } 
      // if `form` is submitted why do we need to set `.location`? 
      // window.location = '/membership-change-success'; 
     } else { 
      alert('Please make sure you deactivate your listings to the appropriate amount before you Downgrade.') 
     } 
     }, function err(jqxhr, textStatus, errorThrown) { 
      console.log(errorThrow) 
     }) 
+0

Das Problem kann darauf zurückzuführen sein, dass es kein dom-Element mit der Klasse 'plainChoice' gibt, aber' $ (". PlanChoice"). Click ... 'wird im Code verwendet. Außerdem gibt es ein' $ (this) 'darin der Ajax – brk

+0

@brk Das ist möglich. '$ (this)' würde auf das angeklickte Element verweisen - wenn die Elemente existieren - wenn nicht, dann bekommen wir sogar einen Fehler bei 'jQuery()' call, bevor $ 'ajax()' erreicht wird? Die Antwort lautet "nein" https://jsfiddle.net/39Ltsg3s/ – guest271314

+0

@ brk https://StackOverflow.com/questions/45639894/How-to-Catch-When-As-Selector-is-Passed-To-Jquery -that-does-not-exist-in-docume – guest271314

0

Sie sollten das folgende Formular für Ihre Ajax-Aufruf verwenden

$.ajax({ 
    url: '/ajax/planCheck.php', 
    type: "POST", 
    dataType: 'json', 
    data: ({plan: $(this).data("plan")}), 
    success: success = data 
    }) 
    .done(function(response) { 
     if(success) { 
      if (isGood) { 
       $("#PaymentForm").submit(); 
      } 
      window.location = '/membership-change-success'; 
     } 
     else { 
      alert('Please make sure you deactivate your listings to the 
      appropriate amount before you Downgrade.') 
     } 
    }); 

die .done() Klausel stellt sicher, dass Sie diesen Code nach dem ausführen Der Ajax-Ruf ist beendet und die Antwort wird erhalten.

+0

I ' habe versucht, die .done und die .then Antworten und meine IDE sagt ungelöste Funktion oder Methode done()/then() – OverBakedToast

+0

Ich bekomme ein [Objekt XMLHttpRequest] jetzt, wenn ich versuche, die Ajax-Funktion zurückzugeben. – OverBakedToast

+0

Können Sie zeigen, wo Sie Ihr jquery-Skript einfügen? Etwas wie mandy1339

Verwandte Themen