2

我在 PhoneGap 上构建了一个移动应用程序。我创建了几个静态 HTML 页面(本地存储在手机上)并尝试使用 AJAX 从服务器加载一些数据。

$( document ).bind( "mobileinit", function() {
        $.support.cors = true;
        $.mobile.allowCrossDomainPages = true; 
    });

$(document).ready(function () {
    ajaxDeferred = $.ajax({
        url: 'http://example.com/api/isAuthorized'
        type: method,
        data: parameters,
        timeout: 40000
    });

    ajaxDeferred
        .done(function(data) {  

              alert(data.result);     

         })
        .fail(onFailHandler);
}); 

在服务器端我有这个代码

public ActionResult IsAuthorized()
{
        FormsAuthentication.SetAuthCookie("shade", true);

        return this.Json(
            new
                {
                    result = this.HttpContext.User.Identity.IsAuthenticated
                },
                JsonRequestBehavior.AllowGet
            );
 }

我预计:

  • 在第一次运行时收到“假”结果,因为用户未经授权
  • 在第二次运行时收到“True”,因为 SetAuthCookie

当我在浏览器中尝试时,它按预期工作。但无论我运行移动应用程序,我总是收到 False,就像 cookie 没有被转移一样。

所以问题是如何使用 AJAX 正确登录用户,这可能吗?什么是最佳做法?由于未知原因,PhoneGap 手册并未涵盖这种简单的场景。

4

1 回答 1

1

好的,我找到了答案:

$(document).ready(function () {

   ...

});

不适合。相反,必须使用

document.addEventListener(
  "deviceready",
  function() {

     ... at this point cookies are working fine!

  },
  false);

不需要 Access-Control-Allow-Origin 和 Access-Control-Allow-Credentials 标头以及其他跨域技术

于 2013-04-03T16:00:31.443 回答