XMLHttpRequest适用于Adobe Air预览但不适用于编译应用

时间:2010-08-22 13:47:57

标签: air xmlhttprequest

我有一个adobe air应用程序,我使用Dreamweaver CS5作为我的IDE。当我预览应用程序时,一切都很完美。当我创建应用程序并尝试运行它时,我运行的第一个XMLHttpRequest失败。我认为这是一个安全问题,但我不知道。

我每次都收到'无效'密码消息,因为domainCOM.status返回的状态为0。

更新:我安装了一个应用程序来观察XMLHttpRequest,它说我的状态为200,我可以看到返回正确的XML。 adobe air的这种menas以某种方式将200的状态变为0。

UPDATE2:如果我在预览中运行它,我会得到

readyState 2,状态200 readyState 3,状态200 readyState 3,状态200 readyState 4,状态200

但如果我在编译版本中运行它,我只能得到

readyState 4,状态0

似乎它没有做任何事情,但我可以看到实际的XHR进行调用并使用Fiddler2返回。

非常奇怪。

任何帮助/想法将不胜感激。这是代码片段:

var url = "http://open-api.domain.com/authentication.getUserToken.domain";
var vars = "v=3&appKey="+appKey+"&email="+email+"&password="+password;

var domainCOM = new XMLHttpRequest();
domainCOM.open("POST", url, true);
domainCOM.setRequestHeader ("Content-type", "application/x-www-form-urlencoded");
domainCOM.setRequestHeader ("Content-length", vars.length);
domainCOM.setRequestHeader ("Connection", "close");         

domainCOM.onreadystatechange = function() {     
   if (domainCOM.readyState == done) {
      if (domainCOM.status == ok) {
         if (domainCOM.responseText) {
            //do some stuff
         }
         else {
            window.alert('unknown error in authenticationGetUserToken.');
         }
        }
        else {               
            window.alert('Password / Userid combination is not valid.  Please correct and try again.');
        }     
    }
};
domainCOM.send(vars);
return;

谢谢, 凯西

1 个答案:

答案 0 :(得分:0)

每当我在网络浏览器中获得状态代码0时,通常意味着我正在发出跨域请求,浏览器只是放弃请求。你的JS文件是否加载到application sandbox?虽然我还没有尝试过,但Air允许在应用程序沙箱中使用[跨域AJAX请求],但是严重限制了从Web服务器加载的页面的跨域功能。