我在“网站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();
}
答案 0 :(得分:1)
你正在使用json但是对于跨浏览器的ajax帖子你应该使用jsonp
答案 1 :(得分:1)
需要这样做:
$.ajax({
url: URL,
data: {submission: jsonData},
dataType: 'jsonp',
cache: false,
success: function (data) {
alert(data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
答案 2 :(得分:0)
我过去遇到过类似的问题。
有教奶奶吸蛋的风险......
首先,关于问题的诊断 我很确定这是一个同源策略问题,因为这些结果并没有获得成功或错误消息,这是非常典型的。 您 COULD 为了诊断它的目的是在firefox上使用firebug,并查看http请求/响应本身。在那里,您将看到响应,因为这是在浏览器过滤掉之前。
关于解决方案。
就像安东尼说的,你 CAN 使用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});