2016-06-17 5 views
0

wcfサービスの電子メールに対する投稿要求をしています。件名と本文が属性であるオブジェクトです。 私はajax呼び出しをしようとすると、私は400の悪いリクエストエラーを取得していますこれは私のコードは以下のとおりです。 stringify関数にオブジェクトを配置する方法がわかりません。Jsonオブジェクトが投稿されたときに400(Bad Request)が返される

{ 
    "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

あなたのwcfサービスを直接呼び出すことはできますか? – Greg

+0

実際に私はこのサービスをウェブサイトで呼び出しています – mehraj

+0

Fiddlerなどのツールでhttp:// localhost:29143/Restwebservice.svc/sendmailを呼び出すと結果は得られますか? – Greg

答えて

0

あなたは、それは次のようになります呼び出すしかし、私はアヤックスのデータ構造から想定し、私たちにsendmail方法を示していない。

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

sendmail方法は、この

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

ようになります。リクエストタイプはラップされているので、ajaxからのデータを投稿する際には、最初にラッパーオブジェクトとして動作するemailentityオブジェクトを作成するのが理想的です。

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

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

このdataToSendは、今すぐajax経由で投稿されます。

$.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"); 
      } 
     }); 

これが役に立ちます。

+0

作品は素晴らしいおかげで仲間 – mehraj

0

悪い要求は、JSONが無効であるとき、あなたは「電子メール」と呼ばれるそこにオブジェクトを持っているので、ここではこのエラーがあり、その後、Button1の上であなたは「電子メール」と呼ばれる新しい変数を定義しているクリックが発生します。ここでは、以前の電子メールオブジェクトを参照する代わりに、新しい変数を作成し、 "var email"のメンバーが存在しない場合にメンバーに値を割り当てようとしています。この「メール」オブジェクトを文字列化が、オブジェクトを送受信する場合は、それが不正な要求をスロー一致しないため、サーバ側で電子メールと同じオブジェクトを受け取ることを確認して今この

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

のようなものをやってみて、 。

関連する問題