Javascript XMLHttpRequest无法连接到Google App Enging

Javascript XMLHttpRequest无法连接到Google App Enging,javascript,google-app-engine,xmlhttprequest,Javascript,Google App Engine,Xmlhttprequest,客户端:Chrome浏览器上的javascript 服务器:Google App Enging、java servlet 我正在尝试从服务器端获取令牌,以下是我的js代码: var httpRequest; if (window.XMLHttpRequest) { // Mozilla, Safari, Chrome,... httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { // ... }

客户端:Chrome浏览器上的javascript 服务器:Google App Enging、java servlet 我正在尝试从服务器端获取令牌,以下是我的js代码:

var httpRequest;
if (window.XMLHttpRequest) {
  // Mozilla, Safari, Chrome,...
  httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  // ...
}
if (!httpRequest) {
  alert('Giving up :( Cannot create an XMLHTTP instance');
  return false;
}
httpRequest.open('POST', 'http://myapp.appspot.com/gettoken?userid=ethan', true);
以及我的servlet服务器代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
String userId = request.getParameter("userid");
if (userId != null && !"".equals(userId)) {
  String token = createChannel(userId);
  writeIntoChannel(response,token);
}
}
基本上与GAE的CodeLabEx4相同,只是我将它的js代码移动到客户端。它的原始代码是

httpRequest.open('POST', '/gettoken?userid=ethan', true);
这是可行的,但是为什么在我添加完整的url后它就不起作用了呢? 状态=0,而不是200

httpRequest.open('POST', 'http://myapp.appspot.com/gettoken?userid=ethan', true);
////////////////////////////////////////////////////////////////////

经过一些研究,我更新了使用ajax()进行查询的方法:

$.ajax({
    url : 'http://myapp.appspot.com/gettoken?userid=xxx',
                            type : "POST",
                            data:null,
                            success : function(data) {                                  
                                alert('ok!');
                            },
                            error: function(data) {
                                alert(data.statusText);
                            },
                            complete : function() { 
                                //alert("always"); 
                            },

                        });

但是返回的data.statusText为“error”。

如果您的页面位于
localhost
,则您的浏览器将不会向应用程序引擎发送有效请求,因为存在错误。它可能会发送一个
OPT
请求,或者其他一些不会给您真正响应的废话

SOP是问题的另一个线索是响应代码是
0
。(见:)<代码>0不是真正的HTTP响应代码


在app engine上托管此页面或在浏览器中禁用SOP。

如果您的页面托管在
localhost
,则您的浏览器将不会向app engine发送有效的请求,因为存在错误。它可能会发送一个
OPT
请求,或者其他一些不会给您真正响应的废话

SOP是问题的另一个线索是响应代码是
0
。(见:)<代码>0不是真正的HTTP响应代码


在应用程序引擎上托管此页面或在浏览器中禁用SOP。

运行js的页面是否也托管在
myapp.appspot.com
,或其他类似localhost的地方?js客户端页面是本地的(不托管在myapp.appspot.com)是运行js的页面,也托管在
myapp.appspot.com
,或者像localhost这样的其他地方?js客户端页面是本地的(不在myapp.appspot.com上托管),如果我将html5/js应用部署到iOS/Android,它仍然是localhost吗?抱歉,我不熟悉web编码:(看起来XMLHttpRequest不适合用于移动应用程序。我在一本书中看到了5种方法:1.XMLHttpRequest 2.Dynamic script tag insertion 3.iframes 4.Comet 5.Multipart XHR,哪一种适合?谢谢!如果我将html5/js应用程序部署到iOS/Android,它仍然是本地主机吗?抱歉,我对web编码不熟悉:(看起来XMLHttpRequest不适合移动应用。我在一本书中看到了5种方法:1.XMLHttpRequest 2.动态脚本标记插入3.iframes 4.Comet 5.多部分XHR,哪一种适合?谢谢!