0

メールを送信するためのWebサービスを含む外部ドメインにWebサービスがあります

jquery ajax を使用してクロスドメイン Web サービスを呼び出したいのですが、問題は成功値を取得できなかったことです。Web サービスが正常に実行され、メールが送信されても​​エラーになります。

firebug (Net タブ) をチェックインし、実行中に ?callback=[some jump function] を追加しましたが、その関数が見つからないため、適切なメッセージが表示されません。

以下は私のウェブメソッドです

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string SendMail()
{
    string returnVal = string.Empty;
    try
    {
        MailMessage message = new MailMessage();
        message.From = new MailAddress("[from]");
        message.To.Add("[to]");
        message.Subject = "TEST";
        message.Body = "TEST MAIL";
        message.Priority = MailPriority.High;
        SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
        client.EnableSsl = true;
        client.Credentials = new NetworkCredential("[username]", "[password]");
        client.Send(message);
        returnVal = "[mycallback]({'status':'Success'})";
    }
    catch (System.Exception ex) { returnVal = "[mycallback]({'status':'Fail Reason: " + ex.Message + "'})"; }
    return returnVal;
}

以下は私のajax jquery呼び出しです

    $(document).ready(function(){
            $.ajax({
                type:"GET",
                url:"http://audiomedia.dev.asentechdev1.com/MailSender.asmx/SendMail",
                dataType:"jsonp",
                jsonpCallback: 'mycallback',
                success: function(data){
                    alert(json.Parse(data));
                },
                error: function (data) {
                    alert("Error: " + data.responseText);
                }   
            });
            function mycallback(data){
                alert("CallBack: " + JSON.stringify(data));
            }
        });

戻り値を変更してコールバックを追加すると、サーバーからの返信 ここに画像の説明を入力 が少なくなりますが、メールを正常に送信した後でもエラーコールバックになります。成功メッセージをフォーマットする方法を教えてください。

4

2 に答える 2

1

と同じ名前の関数内に応答データをラップする必要がありますSomeJunkFunction。例えば...

SomeJunkFunction() {return {"SomeProperty":"SomeValue"}};

なぜこれが必要なのかというと…

同一オリジン ポリシーは、クロスドメインのクエリがデータを返すことを防ぎます。これを回避するには、外部の JavaScript ファイルを含めてシミュレートします。シミュレートされた JS ファイルには、データを返す関数があります。ブラウザーは、関数が静的で正当なものであると想定して実行できるようにします。

クライアントが「静的」js で提供される関数の名前を知るために、たとえば呼び出しでそれを渡し、SomeJunkFunction作成する新しい関数がそのように命名されることを信頼します。

詳細とサンプル コードについては、このページを参照してください。

編集:明確にするために、ページ自体で作成しないSomeJunkFunctionでください。サーバーからの応答に含める必要があります。パラメータはありません。サーバーはデータを返しません。呼び出されたときにデータを返す関数を返します。

于 2013-01-14T23:03:51.723 に答える
0

適切な JSONP を返していないため、エラー状態になっています。クロスドメイン JSONP リクエストを完了するには、jQuery によって生成されたコールバック関数でラップされたリクエストを返す必要があります。jQuery がこの関数でラップされた応答を受信しない場合、成功のコールバックはトリガーされません。

変化する

 return returnVal;

 return "[callback]({status: [returnVal]})";
于 2013-01-14T23:06:26.957 に答える