gpt4 book ai didi

jquery - 通过 JQuery 向 Google App Engine 发送 POST 请求时没有结果

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:09 25 4
gpt4 key购买 nike

我正在尝试通过 JQuery AJAX 向我的 GAE 应用程序发送 POST 请求,但我没有收到任何响应数据。我有一个非常简单的 servlet,它只是回显我传入的“msg”。还覆盖了 doOptions。

@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
resp.setHeader("Access-Control-Allow-Origin", "*");
resp.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
resp.setHeader("Access-Control-Max-Age", "1728000");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
resp.setContentType("text/javascript");
resp.setCharacterEncoding("utf-8");

String msg = req.getParameter("msg");
resp.getWriter().print(msg);
}

这是我通过 JQuery AJAX 调用的方式

var parameters = {msg:"hello"};
$.ajax({
type: 'POST',
url: service_url,
data: parameters,
success: successhandler,
error: errorhandler
})

如果我通过 FireBug 查看我的交互,我会看到这一点。

首先,JQuery发出一个OPTIONS请求

Host lessondesigner.appspot.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Origin lessondesigner.appspot.com
Access-Control-Request-Me... POST

Access-Control-Allow-Orig... *
Access-Control-Allow-Meth... GET, POST, OPTIONS
Access-Control-Max-Age 1728000
Date Mon, 06 Sep 2010 01:11:56 GMT
Content-Type text/html
Server Google Frontend
Content-Length 0

接下来发送POST请求

Host lessondesigner.appspot.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept application/json, text/javascript, */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Referer lessondesigner.appspot.com/testAjax.html
Content-Length 21
Origin lessondesigner.appspot.com
Pragma no-cache
Cache-Control no-cache

Content-Type text/javascript; charset=utf-8
Content-Encoding gzip
Date Mon, 06 Sep 2010 01:11:56 GMT
Server Google Frontend
Cache-Control private, x-gzip-ok=""
Content-Length 25

但是,我没有得到任何回复!如果我使用 Curl,它工作正常。

curl -d "msg=hello" lessondesigner.appspot.com/lessondesigner

我回来了

"hello"

有人知道这是为什么吗?另外,为什么 JQuery 首先执行 OPTIONS 请求?它甚至不是跨域。

最佳答案

想通了。这是一个跨源资源共享问题。这是一篇很棒的文章。

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

基本上,如果 HTTPRequest header 包含“来源”字段,服务器必须以“Access-Control-Allow-Origin”响应进行回复。就我而言,我是在 OPTIONS 请求中执行的,但没有在 POST 请求中执行。因此 firefox 没有返回我的内容数据。要修复它,我必须这样做。

@Override  
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
resp.setHeader("Access-Control-Allow-Origin", "*");
resp.setContentType("text/javascript");
resp.setCharacterEncoding("utf-8");
String msg = req.getParameter("msg");
resp.getWriter().print(msg);
}

关于jquery - 通过 JQuery 向 Google App Engine 发送 POST 请求时没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com