2

「Web サイト B」に投稿する「Web サイト A」にフォームがあります。以下に含まれるコード。

宛先ドメインから成功または返信メッセージを取得できません。

助言がありますか?私は何を間違っていますか?

<script type="text/javascript">

$.fn.serializeObject = function()
{
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};

$(document).ready(function(){
    $("#submit").bind("click", function(){

        //turn form into json
        var formData = $("#digForm").serializeObject();
        var jsonData = JSON.stringify(formData);


        alert(jsonData);

        $.ajax({
            url: URL,
            data: jsonData,
            dataType: 'jsonp',
            cache: false,
            success: function (data) {
                alert(data);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                                alert(errorThrown);
                            }
        });
    })
});
</script>

コントローラーは次のとおりです。

[HttpPost]
public ActionResult Index(string submission)
{
    SubmissionModel model = new SubmissionModel();

    //validate everything we need is here
    var serializer = new JavaScriptSerializer();

    // get json data from url
    var json =  submission;
    var submissionData = serializer.Deserialize<SubmissionModel>(json);

    model.SiteID = submissionData.SiteID;
    model.FirstName = submissionData.FirstName;
    model.LastName = submissionData.LastName;
    model.Email = submissionData.Email;
    model.Comments = submissionData.Comments;
    model.Like = submissionData.Like;
    model.Dislike = submissionData.Dislike;
    model.SubmitDate = DateTime.Now;
    db.Submissions.Add(model);
    db.SaveChanges();

    return View();
}
4

3 に答える 3

1

このようにする必要がありました:

$.ajax({
    url: URL,
    data: {submission: jsonData},
    dataType: 'jsonp',
    cache: false,
    success: function (data) {
        alert(data);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }
});
于 2013-03-26T14:40:16.667 に答える
1

あなたはjsonを使用していますが、クロスブラウザのajax投稿にはjsonpを使用する必要があります

http://forums.asp.net/t/1780255.aspx/1

于 2013-03-09T16:50:49.693 に答える
0

私は過去に同様の問題に遭遇しました。

おばあちゃんに卵を吸うように教える危険を冒して…。

まず、問題の診断に関しては、 これは同一生成元ポリシーの問題であると確信しています。これらの結果には、非常に一般的な成功またはエラーメッセージが表示されないためです。それを診断するためにあなたができることは、firefoxでfirebugを使用し、httpリクエスト/レスポンス自体を調べることです。これはブラウザによって除外される前であるため、向こうに応答が表示されます。

解決策について。

Anthonyが言ったように、jsonpを使用できます。JsonPは、実際には、JS関数であるかのようにデータを非表示にすることで、同一生成元ポリシーを回避するハックです。

私は通常、ajax()の代わりにgetJsonを使用します。 http://api.jquery.com/jQuery.getJSON/

そして、postパラメータに「callback = AnyName」を追加して、jsonpを手動で使用するように設定しました。

また、サーバーBの応答コードが表示されませんが、jsonデータをAnyName()でカプセル化する必要があります。したがって、jsonデータが{json、data}の場合、応答はAnyName({json、data});である必要があります。

于 2013-03-10T18:03:33.600 に答える