我有一个用C#编写的简单的Azure移动服务后端,其登录功能为/api/CustomLogin
。下面的函数是一个简单的登录测试,我在Javascript中我替我的网络应用程序,它访问这些数据:Azure移动服务javascript SDK在Firefox中不起作用
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对象具有正确的StatusCode和认证令牌。但是,当我在Firefox 32上运行此测试时,它会返回空对象{}
,这意味着我没有收到用户信息。我正在使用http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.2.min.js的Azure移动服务SDK。
我已经使用http和https(由Azure提供)在本地主机和部署的网页(也在Azure网站上托管)上测试了这一点,并且这适用于Chrome和Internet Explorer,但不适用于Firefox。
在Firefox移动服务API工作的其他功能,例如
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对该错误更敏感。你可以尝试更新到1.2.5.js(或1.2.5.min.js),看看问题是否仍然存在? – phillipv 2014-10-08 18:07:37
好的,我已更新到1.2.5.js,问题依然存在。我在invokeAPI方法中添加了一些console.logs,我可以看到在Firefox中,响应以XML编码,而不是JSON编码,因此无法将其转换为FF中的JSON对象。你知道我可以如何强制响应在所有浏览器中都是JSON吗? – Daniel 2014-10-09 07:40:16