【发布时间】:2014-01-21 18:02:59
【问题描述】:
在客户端:
var data = {Title":"Some Title","Description":"Something"} ;
$.support.cors = true;
$.ajax({
type: 'POST',
dataType: 'json',
url: apiUrl + "/Save",
data: data,
contentType: 'application/x-www-form-urlencoded',
success: function (returnedData) {},
error: function (xhr, ajaxOptions, thrownError) {},
processData: false,
async: false
});
在服务器端:
[HttpPost]
public ActionResult Save(DataModel data)
{
Response.AppendHeader("Access-Control-Allow-Origin", "*");
Response.AppendHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
return null;
}
这是数据模型:
public class DataModel
{
public string Title { get; set; }
public string Description { get; set; }
}
一切正常。但是,当它向“保存”控制器操作发出 POST 请求时,模型上的属性始终为空,并且不会从客户端获取值。
请注意,这是对我网站“子域”的跨域请求(即从 example.com 调用 api.example.com)
我错过了什么?
提前谢谢大家!
【问题讨论】:
-
其他类似的ajax请求是否有效?
-
谢谢@KevinB,我该怎么做呢?顺便说一句,这将在 Phonegap 中运行,所以我相信只要它在 WebKit 上运行就可以了。
-
是的,在phonegap中你确实需要那个标志iirc。
-
啊,我看到了什么。
processData设置为false,data是一个对象,因此不会发送。您应该将 processData 设置为 true,or(not and!) 将 contentType 更改为 json 并将对象解析为 json(取决于您的 api 的要求) -
我已尝试将 processData 设为 true;同样的问题。当我将 contentType 切换为“application/json”时,Chrome 中出现“No 'Access-Control-Allow-Origin' header is present”错误。
标签: jquery json cors asp.net-web-api