如何在服务器端回应Ajax请求?

3

我有如下函数:

$.ajax({url:"http://127.0.0.1:8080", data: "123",
    success:
    function(response, textStatus, jqXHR) 
    {
        alert(response);
    },
    error:
    function(jqXHR, textStatus, errorThrown)
    {
        alert("The following error occured: " + textStatus + " " + errorThrown);
    }
});

它发送请求,我使用"nc -l 8080"拦截其中一个。 看起来像是:

GET /?123 HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:15.0) Gecko/20100101         Firefox/15.0.1
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null

然后我回答:

HTTP/1.1 200 OK
Content-Length: 3

abc

问题是我总是会遇到错误(“发生以下错误:error”)。 你认为可能出了什么问题?

6
为什么您的响应中没有设置Content-Type - whirlwin
1
你的浏览器是否正在发送请求?也许是同源策略阻止了对不同域的请求。你是从127.0.0.1:8080提供JavaScript吗? - Tomasz Nurkiewicz
你的本地主机上是否都有这两部分? - Reflective
在您的错误回调中,尝试使用 alert(JSON.stringify(jqXHR));。它显示了什么? - whirlwin
你在服务器端使用什么编程语言? - Billybonks
显示剩余3条评论
2个回答

0

readyState=0 意味着请求尚未发送,常量名称为"UNSENT": http://www.w3.org/TR/XMLHttpRequest/

在发送请求之前出现错误的实际原因,同源策略是最可能的罪魁祸首。

您必须使用相对链接 url:"/" 来捕获请求。


0

正如Tomasz所指出的那样,这是由于同源策略。

为了证明/测试这一点:

假设您的HTML页面是“index.html”,请执行以下操作。

  • 从与index.html相同的目录中运行命令“python -m SimpleHTTPServer 8080”
  • 访问浏览器并键入“http://127.0.0.1:8080/index.html”。Python应该提供html,浏览器应该正常呈现它。
  • 现在杀死python命令,而是运行“nc -l 8080”。NC已准备好处理与原始网页相同域/端口的ajax请求。
  • 现在只需从网页调用ajax,并回复nc即可。

现在ajax应该可以工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接