1

客户端: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);

那行得通,但是在我添加完整的网址后怎么会不起作用?状态 = 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 是“错误”。

4

1 回答 1

1

如果您的页面托管在,那么由于同源策略localhost,您的浏览器不会向应用引擎发送有效请求。它可能会发送一个请求,或者其他一些不会给你带来真正响应的废话。OPT

SOP 是问题的另一个线索是响应代码是0. (参见:http ://en.wikipedia.org/wiki/List_of_HTTP_status_codes )。0不是真正的 HTTP 响应代码。

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

于 2012-04-19T04:01:51.487 回答