客户端: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);
这是有效的,但是在我添加完整的网址之后怎么回事呢? status = 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是'错误'。
答案 0 :(得分:1)
如果您的网页位于localhost
,则由于Same Origin Policy,您的浏览器不会向应用引擎发送有效请求。它可能会发送OPT
请求或其他一些不会让您真正回复的废话。
SOP问题的另一个线索是响应代码为0
。 (见:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。 0
不是真正的HTTP响应代码。
在应用引擎上托管此页面或在浏览器中停用SOP。