2017-03-13 3 views
1

Das muss eine wirklich einfache Antwort sein, aber ich kann nicht sehen, wo ich falsch liege.Returning Bool zu AJAX Anfrage

Geben Sie einfach eine Test AJAX-Anfrage mit C# -Code hinter. Ich kann die C# nicht dazu bringen, eine wahr/falsch-Anweisung zurückzugeben, oder ich kann die AJAX nicht dazu bringen, sie als wahr/falsch zu erkennen.

[WebMethod] 
    public static bool testme(int testnumber) 
    { 
     if (testnumber < 12) 
     { 
      return true;    } 
     else 
     { 

      return false; 
       } 

    } 

AJAX:

<script> 
     $(document).ready(function() { 
      $('#test').click(function() { 
       $.ajax({ 
        type: "post", 
        url: "WebForm1/testme", 
        data: { testnumber: 13 }, 
        contentType: "application/json; charset=utf-8", 
        datatype: "json", 
        success: function (data) { 
         if (data) { 
          console.log("true"); 
         } 
         else { 
          console.log("false"); 
         } 
        }, 
        Error:function(error){ 
         console.log("error"); 
        } 
       }); 
      }); 
     }) 


    </script> 

Button:

<input type="button" id="test" value="click me"/> 

Die console.log wahr zeigt, obwohl die Zahl Ich bin Eingabe als 12 größer ist, die die Rückkehr sollte " false "bool aus der C# -Methode.

console.log is returning a full page render see picture

+0

möglich, dass der Datentyp bool statt JSON sein muss? – Rinktacular

+0

Nein, das stoppt nur die ganze AJAX-Anfrage, irgendwelche anderen Ideen? –

Antwort

0

So stellt sich heraus es relativly einfach war, aber nicht sicher, warum es getan werden muss. Ich habe Hilfe von https://forums.asp.net/t/2023743.aspx?Ajax+Webmethod+not+firing+

Ich musste ändern //settings.AutoRedirectMode = RedirectMode.Permanent; bis

settings.AutoRedirectMode = RedirectMode.Off;

zu meiner RouteConfig.cs und dann hat alles gut funktioniert.

Wenn jemand weiß, warum dies nicht automatisch geändert wird, wenn Sie die System.Web.Services hinzufügen; oder was das bedeutet, würde ich gerne wissen, sowieso, alles funktioniert jetzt großartig.

0

Ihre if(data) Check Truthiness ist die Überprüfung, data wird ein Objekt sein, so sehen es Eigenschaften ist und Sie können C# 's Ergebnis finden.

Wenn Sie mit JS Wahrheit nicht vertraut sind, suchen Sie nach einer besseren Beschreibung: aber jede Variable wird als truthy betrachtet, wenn sie einen gültigen Wert hat, wenn sie null oder undefiniert ist (oder 0 oder '') wird nicht als truthy betrachtet und wird eine boolesche Prüfung nicht bestehen.

+1

Also was wäre der Code zum Überprüfen der Eigenschaften, ich habe Daten ausprobiert.Eigenschaften, aber ich kann die Überladungsmethode nicht finden? irgendeine Hilfe? –

+0

Ich neige dazu, nur 'console.log (Daten);' und in den Entwicklertools sollten Sie in der Lage sein, es –

+0

das Problem mit diesem zu überprüfen, ist console.log (Daten) geben Sie mir die vollständige Seite Skript in den Entwicklertools Konsole, kein einziges Ergebnis –

0

Wenn Sie eine Antwort von einem WebMethod wie diesem erhalten, müssen Sie einen .d verwenden, um den Wert zu referenzieren. Ihr aktueller Code überprüft einfach, ob Sie eine Antwort erhalten haben, und wird wahrscheinlich immer als wahr ausgewertet.

<script> 
     $(document).ready(function() { 
      $('#test').click(function() { 
       $.ajax({ 
        type: "post", 
        url: "WebForm1/testme", 
        data: { testnumber: 13 }, 
        contentType: "application/json; charset=utf-8", 
        datatype: "json", 
        success: function (data) { 
         if (data.d) { 
          console.log("true"); 
         } 
         else { 
          console.log("false"); 
         } 
        }, 
        Error:function(error){ 
         console.log("error"); 
        } 
       }); 
      }); 
     }) 
    </script> 

Ein Zeiger auch, dass können Ihnen helfen, herauszufinden, was würde sein wird auf das Registerkarte Netzwerk zu verwenden, von Ihnen Entwickler-Tool (F-12) Browser das Antwortformat zu sehen, die vom Server kommen . Es gibt nicht nur wahr oder falsch zurück, es gibt d: true oder d: false zurück, also die Änderung, die ich erwähnte.

+0

, das immer noch nicht funktioniert, bekommen falsche Antworten jetzt, auch wenn ich die "Testnummer" auf 11 –

+0

geändert haben Ist der richtige Wert über Entwickler-Tools zurückkommen? (Können Sie die Rückkehr, die Sie dort sehen) –

+0

über Entwickler-Tools, wenn ich console.log (data.d) ich undefined, wenn ich console.log (Daten) Ich bekomme das vollständige Skript in der Konsole –

0

Immer wenn ich Ajax verwenden muss, kehre ich vom JSON-Objekt der Funktion zurück. Für z:

return Json(new { result = true }); 

und in AJAX:

<script> 
     $(document).ready(function() { 
      $('#test').click(function() { 
       $.ajax({ 
        type: "post", 
        url: "WebForm1/testme", 
        data: { testnumber: 13 }, 
        contentType: "application/json; charset=utf-8", 
        datatype: "json", 
        success: function (data) { 
         if (data.result === true) { 
          console.log("true"); 
         } 
         else { 
          console.log("false"); 
         } 
        }, 
        Error:function(error){ 
         console.log("error"); 
        } 
       }); 
      }); 
     }) 


    </script>