2016-07-08 13 views
-1

Ich versuche, ein JSON-Objekt an eine C# -Methode zu senden und ein anderes (auch JSON) Objekt zurückzugeben.Senden von Objekt auf AJAX-Aufruf an WebMethod

Das Objekt wird in JavaScript erstellt:

function CreateLottery(lottery) { 
$.ajax({ 
    type: 'POST', 
    url: 'default.aspx/Create', 
    data: lottery, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function (data, status) { 
     alert(status) 
    }, 
    error: alert("error!") 
}); 
} 

Der C# -Code-behind (i Haltepunkt haben und es erreicht nie hier):

lottery = { 
     TotalValue: totalValue, 
     Players: txtPlayers.value, 
     TicketPrice: txtAmount.value, 
     FirstPrize: prize, 
     MyComission: myComission, 
     MyRate: myRate, 
     SellerComission: sellerComission, 
     SellerRate: sellerRate 
    } 

Dann wird es über AJAX gesendet

[WebMethod] 
    public static object Create(Lottery lottery) 
    { 
     return new 
     { 
      foo = "bar", 
     }; 
    } 
    public class Lottery 
    { 
     public decimal TotalValue { get; set; } 
     public decimal Players { get; set; } 
     public decimal TicketPrice { get; set; } 
     public decimal FirstPrize { get; set; } 
     public decimal MyComission { get; set; } 
     public decimal MyRate { get; set; } 
     public decimal SellerComission { get; set; } 
     public decimal SellerRate { get; set; } 
    } 

Warum bekomme ich immer den "Fehler!" aufmerksam?

+1

"Warum gibt es immer Fehler?" - Welcher Fehler wäre das genau? – X3074861X

+0

überprüfen Sie die Antwort und sagen Sie mir, es funktioniert oder nicht. – Developer

+0

Ich habe die Frage bearbeitet, keine Notwendigkeit, zu downvote. Es ist eine legitime Frage, etwas Besonderes passiert, und ich bitte um Hilfe, nicht für jemanden, der die Arbeit für mich erledigt. – Tiago

Antwort

0

Stringify Ihre Daten zuerst:

var lottery = { 
    TotalValue: totalValue, 
    Players: txtPlayers.value, 
    TicketPrice: txtAmount.value, 
    FirstPrize: prize, 
    MyComission: myComission, 
    MyRate: myRate, 
    SellerComission: sellerComission, 
    SellerRate: sellerRate 
} 

function CreateLottery(lottery) { 
$.ajax({ 
    type: 'POST', 
    url: 'default.aspx/Create', 
    data: JSON.stringify(lottery), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function (data, status) { 
     alert(status); 
    }, 
    error: function() { 
     alert("error!"); 
    } 
}); 
} 

Edit: Ihre Fehler-Callback ist falsch definiert und wird jedes Mal, wenn der Ajax-Aufruf ausgelöst wird. Ändern Sie wie oben gezeigt.

+0

Danke. Ich habe behoben, was Sie gesagt haben, aber ich bekomme immer noch "Fehler!". Ist es möglich, dass einige Werte nicht als Dezimalzahl (numerisch) gesendet werden, wie die Werte der Lotterieklasse erwarten? – Tiago

0

können Sie Daten an Web-Methode senden, haben zwei Arten von Methoden sind unten angegeben.

Methode 1

Sie können wie jede Eigenschaft Wert in Web-Methode übergeben als

function CreateLottery(lottery) { 
$.ajax({ 
    type: 'POST', 
    url: 'default.aspx/Create', 
    data: {'TotalValue': totalValue, 'Players': txtPlayers.value,'TicketPrice': txtAmount.value, 'FirstPrize': prize,  'MyComission': myComission, 'MyRate': myRate, 'SellerComission': sellerComission, 'SellerRate': sellerRate}, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function (data, status) { 
     alert(status) 
    }, 
    error: alert("error!") 
}); 
} 

Methode 2

Ändern Array Objekt Zeichenfolge JSON.stringify(lottery) verwenden.

var lottery = { 
    TotalValue: totalValue, 
    Players: txtPlayers.value, 
    TicketPrice: txtAmount.value, 
    FirstPrize: prize, 
    MyComission: myComission, 
    MyRate: myRate, 
    SellerComission: sellerComission, 
    SellerRate: sellerRate 
} 


function CreateLottery(lottery) { 
$.ajax({ 
    type: 'POST', 
    url: 'default.aspx/Create', 
    data: JSON.stringify(lottery), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function (data, status) { 
     alert(status) 
    }, 
    error: alert("error!") 
}); 
} 
+0

Ich tat das, auch behoben den Fehler Rückruf wie in der anderen Antwort gezeigt, aber immer noch "Fehler!". Ich habe beide Methoden ausprobiert. Ist es möglich, dass das Problem darin besteht, dass die Daten nicht als Dezimalzahl (numerisch) gesendet werden, wie es die Lotterieklasse erwartet? – Tiago