我们正在尝试调用使用SSL证书的.NET REST API。我们已将服务器标题设置为Allow All(使用CORS),当我们尝试通过带有以下代码的Web浏览器访问它时它很有效,但是当我们尝试使用Intel XDK创建的应用程序时,我们得到的都是错误(如下图所示:
function test1() {
var self = this;
self.ajax = function (uri, method, data)
{
alert('sending: ' + data);
var request = {
url: uri,
type: method,
contentType: "x-www-form-urlencoded",
accepts: "application/json",
cache: false,
origin: 'localhost',
data: data,
success: function (result)
{
console.info("WORKS!");
},
error: function (jqXHR) {
console.log("Got a response");
console.log(jqXHR);
console.log("ajax error " + jqXHR.status);
}
};
return $.ajax(request);
};
self.ajax(
'https://localhost:44301/token',
'POST',
'grant_type=XXX&username=XXX&password=XXX'
)
.done(function (data) {
alert('got data from auth');
alert(data.access_token);
});
}
function test2()
{
$.ajax({
url: "https://localhost:44301/token",
type: "POST",
jsonp: "callback",
dataType: "jsonp",
data: "grant_type=XXX&username=XXX&password=XXX",
crossDomain: true, //Don't think this is required really...
jsonpCallback: function (data)
{
console.log("JSON P CALLBACK!");
console.info(data);
},
success: function (response) {
console.log(response);
}
});
}
在英特尔XDK项目中,我们使用 xhr.js 文件,这似乎是解决这个问题的通用解决方案,但我还没有看到任何人将其与SSL证书结合使用。
答案 0 :(得分:1)
问题似乎是一个简单的内容编码问题。添加标题后,将内容编码设置为UTF-8就可以了:
$.ajax({
url: 'https://localhost:44302/api/ping',
type: 'POST',
beforeSend: function (request)
{
//This part
request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
},
dataType: "json",
data: JSON.stringify("Hello")
})
.done(function (result)
{
console.info(result);
});