【问题标题】:How to answer to ajax request on server side?如何回答服务器端的ajax请求?
【发布时间】:2012-10-11 10:29:48
【问题描述】:

我有以下功能:

$.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

问题是我总是出错(“发生以下错误:错误”) 您认为它可能有什么问题?

【问题讨论】:

  • 你是如何发送答案的?
  • 您为什么不在回复中设置Content-Type
  • 您的浏览器是否发送了请求?也许是相同的源策略阻止了对不同域的请求。您是否从 127.0.0.1:8080 提供 JavaScript?
  • 这两个部分都在你的本地主机上吗?
  • 在您的错误回调中,尝试alert(JSON.stringify(jqXHR));。它说什么?

标签: javascript ajax http netcat


【解决方案1】:

readyState=0 表示请求尚未发送,常量“UNSENT”的名称: http://www.w3.org/TR/XMLHttpRequest/

至于发出请求之前的错误的实际原因,是的,same-origin-policy 是最有可能的罪魁祸首。

你必须使用相对链接,我猜是 url:"/" 来捕获请求。

【讨论】:

    【解决方案2】:

    正如 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 现在应该可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2013-06-16
      • 2019-06-01
      • 2016-09-23
      • 2012-06-10
      • 2014-02-22
      • 1970-01-01
      相关资源
      最近更新 更多