2016-06-17 8 views
0

Ich mache eine Post-Anfrage für einen WCF-Dienst E-Mail ist mein Objekt, das Attribute Subjekt und Körper hat. Wenn ich versuche, einen Ajax-Anruf zu machen, bekomme ich 400 Bad Request Fehler das ist mein Code unten. Ich weiß nicht, wie man ein Objekt in die Stringify-Funktion bringt.400 (Ungültige Anfrage) wenn ein JSON-Objekt gepostet wird

{ 
    "email": { 
    "subject": "b", 
    "body": "d" 
    } 
} 

$('#Button1').click(function() { 
      var email = { 
       subject: $("#Text1").val(), 
       body: $("#Text1").val(), 

      } 

      $.ajax({ 
       url:"http://localhost:29143/Restwebservice.svc/sendmail", 
       type: 'post', 
       cache: false, 
       contentType: "application/json; charset=utf-8", 
       dataType: 'json', 

       //data: JSON.stringify(email) 
       data: JSON.stringify(email), 
       success: function (data) { 
        $('#target').html(data.msg); 
       } 
      }); 
+0

Aufruf Ihres WCF-Service direkt funktioniert aber? – Greg

+0

eigentlich iam ruft diesen Dienst in einer Website – mehraj

+0

Nein, ich meine, erhalten Sie ein Ergebnis, wenn Sie http: // localhost: 29143/Restwebservice.svc/sendmail mit Fiddler oder ein ähnliches Tool aufrufen? – Greg

Antwort

0

Sie haben uns nicht sendmail Methode gezeigt, aber ich aus der Datenstruktur von Ajax annehmen, dass es nennen soll wie folgt aussehen:

[DataContract] 
public class EmailEntity 
{ 
    [DataMember] 
    public string subject { get; set; } 
    [DataMember] 
    public string body { get; set; } 
} 

die sendmail Methode würde wie folgt aussehen

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, 
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
public void sendmail(EmailEntity emailentity) 
{ 
    ............ 
} 

Jetzt Beachten Sie, dass der Anforderungstyp umbrochen wird. Wenn Sie also Daten von Ajax ausbuchen, erstellen Sie idealerweise zuerst ein Objekt , das als Wrapper-Objekt arbeiten würde.

var emailentity = {}; 
emailentity.subject = "Test subject"; 
emailentity.body = "Test body"; 

var jsonObj = JSON.stringify(emailentity); 
var dataToSend = '{"emailentity":'+jsonObj+'}'; 

dieser dataToSend wird über Ajax geschrieben jetzt werden.

$.ajax({ 
      type: "POST", 
      async: false, 
      data: dataToSend, 
      url: "../path/myService.svc/sendmail", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json",   
      success: function() { 
       alert("success"); 
      }, 
      error: function() { 
       alert("Error"); 
      } 
     }); 

Hoffe, das hilft.

+0

Funktioniert fantastisch danke bro – mehraj

0

Bad Anfrage tritt auf, wenn die json ungültig ist, hier ist dieser Fehler, weil Sie ein Objekt dort genannte „E-Mail“, und dann auf Button1 klicken Sie neue Variable definieren genannte ‚E-Mail‘. Hier, anstatt auf das vorherige E-Mail-Objekt zu verweisen, erstellen Sie eine neue Variable und versuchen, ihren Mitgliedern Werte zuzuweisen, wenn es kein Mitglied für "var email" gibt. versuchen, so etwas wie diese

Object email = new Object(); 
email.subject =$("#Text1").val(); 
email.body = $("#Text1").val(); 

tun Und jetzt stringify dieses ‚email‘ Objekt, aber stellen Sie sicher, dass Sie auf Server-Seite das gleiche Objekt wie E-Mail erhalten, weil, wenn das Senden und Empfangen von Objekten nicht wirft es schlecht Anfrage überein .

Verwandte Themen