【发布时间】:2014-10-10 03:03:09
【问题描述】:
我有一个用 C# 编写的简单 Azure 移动服务后端,它在/api/CustomLogin 具有登录功能。以下函数是我在 Javascript 中为访问这些数据的 Web 应用程序进行的简单登录测试:
var client = new WindowsAzure.MobileServiceClient(
URL,
API_KEY
);
function tryLogin(username, password) {
client.invokeApi("CustomLogin", {
body: {
username: username,
password: password
},
method: "post"
}).done(function (results) {
alert(JSON.stringify(results));
}, function (err) {
alert("Error: " + err);
});
}
这在 Chrome 37 和 Internet Explorer 11 上运行良好,并返回带有正确状态码和身份验证令牌的 JSON 对象。但是,当我在 Firefox 32 上运行此测试时,它会返回一个空对象 {},这意味着我没有收到用户信息。我正在使用来自http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.2.min.js 的 Azure 移动服务 SDK。
我已经在 localhost 和已部署的网页(也托管在 Azure 网站)上使用 http 和 https(由 Azure 提供)对此进行了测试,这适用于 Chrome 和 Internet Explorer,但不适用于 Firefox。
Mobile Service API 中的其他函数可以在 Firefox 中使用,例如
var peopleTable = client.getTable('people');
var query = peopleTable.read().done(function (results) {
alert(JSON.stringify(results));
}, function (err) {
alert("Error: " + err);
});
这让我怀疑invokeApi 有问题,但我不明白为什么这个问题只出现在 Firefox 中。
【问题讨论】:
-
invokeAPI 路径中存在错误,如果响应中未发送 Content-Type,则会出错。可能是 FF 对那个 bug 更敏感。您可以尝试更新到 1.2.5.js(或 1.2.5.min.js),看看问题是否仍然存在?
-
好的,我已经更新到1.2.5.js,问题依旧。我在invokeAPI 方法中添加了一些console.logs,我可以看到在Firefox 中响应是用XML 编码的,而不是像Chrome 中那样用JSON 编码的,这就是它无法将其转换为FF 中的JSON 对象的原因。你知道我如何在所有浏览器中强制响应为 JSON 吗?
标签: javascript azure azure-mobile-services