AJAX:本地主机上的“在此服务器上找不到请求的 URL”

Got*_*ies 3 ajax

  1. Ajax 可以很好地联系远程服务器(使用 jsonp)并返回漂亮的数据。
  2. 在 localhost 中,它表示在此服务器上找不到该 url。
  3. 我在 ajax 之前“警告”url,将其复制粘贴到浏览器地址栏中,然后返回漂亮的数据。

为什么?

哦,当 url 明显有效时,为什么我的 ajax 不能在 localhost 中工作?

我使用 WAMP-server 并为项目文件夹创建了一个别名目录。就像我说的,url 有效,因为我可以通过浏览器的地址栏访问它,但是 ajax 由于某种原因失败了。

编码:

var temp_url = "localhost/api/1.1/app_dev.php/getsomething/something";
$.ajax(
{
    type: "GET",
    url: temp_url,
    timeout:5000, // 5 second timeout in millis!
    data:{ 'get_data' : querystring},
    dataType: "jsonp",
    cache: false,
    success: function( data, textStatus, jqXHR ) {
        console.debug(data);
    },
    error: function(jqXHR, exception)
    {
        if (jqXHR.status === 0) {
            alert('Not connect.\n Verify Network.');
        } else if (jqXHR.status == 404) {
            alert('Requested page not found. [404]');
        } else if (jqXHR.status == 500) {
            alert('Internal Server Error [500].');
        } else if (exception === 'parsererror') {
            alert('Requested JSON parse failed.');
        } else if (exception === 'timeout') {
            alert('Time out error.');
        } else if (exception === 'abort') {
            alert('Ajax request aborted.');
        } else {
            alert('Uncaught Error.\n' + jqXHR.responseText);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

ian*_*n m 5

由于我们无法访问或没有足够的信息来复制您的开发服务器,因此我们能做的最好的事情就是建议一些可能修复它的方法。以下是三个最可能的原因(根据我的经验):

  1. 您使用的是相对路径而不是绝对路径。 例如,如果您的站点位于 ,[localhost]/site/page.html您的浏览器可能会在本地解释 AJAX 请求,因为您使用了相对路径。所以您的实际请求可能被发送到:[localhost]/site/localhost/api/1.1/app_dev.php/getsomething/something...这也可以解释为什么您可以从alert()复制并粘贴URL ,因为将其复制并粘贴到 URL 栏中会自动使其成为绝对路径。

解决方案:尝试使用绝对路径,如下所示:

var temp_url = "/api/1.1/app_dev.php/getsomething/something"
Run Code Online (Sandbox Code Playgroud)

您可以通过在 Chrome、Safari 或 Firefox 中的开发工具中检查“网络”面板来确认您的应用请求的 URL。


  1. 您当前所在的 URL 以 / 结尾。请参阅此处的第二个答案;AJAX 对您所在的当前 URL 是否以正斜杠结尾很挑剔。

解决方案:如果可能,添加或删除当前页面中的正斜杠。


  1. 本地主机可能会因 CORS 原因拒绝您的请求。目前这可能不是您的问题,因为您报告的是 404 错误,但请注意,由于某些神秘的跨域源策略,我经常遇到 localhost 不允许 AJAX 请求,因此这是一件好事提一下,以防你很快遇到它。

解决方案:参见http://enable-cors.org。如果这不起作用,您将需要启动服务器以在本地运行,而不是依赖于从文件系统中检索文件。

祝你好运!

  • 我的天……第一个真的有效!我从没想过浏览器会对 url 做一些有趣的事情,因为它的开头确实有“localhost”。我之前没有清楚地检查过真正的错误,但现在我做了,它确实在开头和之后有被调用的 url 的网站 url。愚蠢的浏览器.. :D 谢谢一群兄弟!节省了一大堆头痛。 (2认同)