2

我在“网站 A”上有一个表格,该表格发布到“网站 B”。代码包括在下面。

我无法从目标域获得成功或返回消息。

有什么建议么?我究竟做错了什么?

<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

您正在使用 json,但对于跨浏览器 ajax 帖子,您应该使用 jsonp

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

于 2013-03-09T16:50:49.693 回答
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 回答
0

我过去遇到过类似的问题。

冒着教奶奶吸鸡蛋的风险……

首先,关于问题的诊断, 我很确定这是一个同源策略问题,因为这些结果没有得到成功或错误消息,这是非常典型的。为了诊断它,您可以在 firefox 上使用 firebug,并查看 http 请求/响应本身在那里你会看到响应,因为这是在被浏览器过滤之前。

关于解决方案。

就像安东尼说的,你可以使用jsonp。JsonP 实际上是一种 hack,它通过隐藏数据,就好像它是一个 JS 函数一样,围绕同源策略工作。

我通常使用 getJson 而不是 ajax() 。 http://api.jquery.com/jQuery.getJSON/

我将它设置为手动使用 jsonp,方法是在 post 参数中添加“callback=AnyName”。

另外,我看不到你服务器B的响应码,但是json数据需要用AnyName()封装;所以如果你的 json 数据是 {json, data},你的响应应该是 AnyName({json,data});

于 2013-03-10T18:03:33.600 回答