【问题标题】:Ajax fails but the call succeeds when I access the URL directlyAjax 失败,但是当我直接访问 URL 时调用成功
【发布时间】:2014-04-25 21:05:00
【问题描述】:

我正在从 firebug 进行以下 AJAX 调用:

var rootUrl = 'http://172.24.105.22:8080/geoserver/Chennai_Sub/ows';

var defaultParameters = {
    service: 'WFS',
    version: '1.0.0',
    request: 'GetFeature',
    typeName: 'Chennai_Sub:Link',
    maxFeatures: 200,
    outputFormat: 'application/json',
    format_options: 'callback: getJson'

};

$.ajax({
    url: rootUrl,
    data: defaultParameters,
    success: function () {
        console.log("victory");
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        console.log(textStatus);
    }
});

AJAX 调用失败。这是我得到的响应对象的一部分:

readyState  4
status  404
statusText  "error"

但是当我真正尝试在浏览器中打开 URL (http://172.24.105.22:8080/geoserver/Chennai_Sub/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=Chennai_Sub%3ALink&maxFeatures=200&outputFormat=application%2Fjson&format_options=callback%3A+getJson) 时,我得到了一个干净的 JSON 响应。知道我做错了什么吗?

(另外,我在这个 URL 中尝试了 firebug 会话:http://172.24.105.22:3000/layer。所以我不认为这是 CORS 问题。)

【问题讨论】:

  • 不确定它是否会改变任何东西,但您是否尝试过添加 method 属性?
  • @War10ck method 是什么意思?如果您询问get 类型,那么是的。但这没有用。
  • 是的,这就是我所指的。 method: "GET"method: "POST",在 jQuery 中 $.ajax({ ... }); 对象...
  • 你能提供$.ajax正在制作的浏览器控制台的url吗?
  • @vergilius http://172.24.105.22:3000/layer

标签: javascript jquery ajax firebug


【解决方案1】:

我无法访问提供的任何 URL,也许您的服务器也无法访问它们,尽管您的本地计算机可能可以?确保可以从您的网站访问目标 URL。此外,如果您从与目标服务器相同的服务器调用 AJAX 请求,我建议使用相对 URL 而不是绝对 URL。

如果上述方法不起作用,另一种选择是使用jQuery的$.get请求而不是$.ajax

$.get('http://172.24.105.22:8080/geoserver/Chennai_Sub/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=Chennai_Sub%3ALink&maxFeatures=200&outputFormat=application%2Fjson&format_options=callback%3A+getJson', function(response) {
console.log(response);
})

或者

$.get('http://172.24.105.22:8080/geoserver/Chennai_Sub/ows', defaultParameters, function(response) {
console.log(response);
})

【讨论】:

  • 它在本地局域网上,所以你当然不能访问它。
  • 如果 API 接受 POST 请求,更好的选择是发布数据。 URL 很长,出于安全原因,某些 Web 服务器可能会限制 URL 的最大长度。
  • 有什么办法让它生效,以便我们更好地为您提供帮助?
【解决方案2】:

嗯,首先是 404,这意味着客户端能够与服务器通信,但服务器找不到请求的内容。因此,只需确保该 rootURL 实际上有一个路由即可。

【讨论】:

    【解决方案3】:

    这可能不是正确的解决方案,但我相信不同的端口可能会导致这样的问题。

    来自上面的评论

    AJAX 请求只允许在相同的域、协议和 端口由于同源政策。

    维基百科对此有何评论: http://en.wikipedia.org/wiki/Same-origin_policy

    【讨论】:

    • 这是正确的解决方案。即使是不同的端口也会导致问题。我在同一个端口进行了测试,效果很好。
    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2011-11-13
    • 2020-10-25
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多