【问题标题】:Why is my ajax call failing为什么我的ajax调用失败
【发布时间】:2016-09-09 01:01:36
【问题描述】:

我设置了一个 ajax 调用,它继续执行失败函数而不是完成函数。它使控制台日志记录“不起作用”而不是“起作用”。我的代码如下。 url '/' 是索引方法。

var data = 
    {
        "latlng": [e.latlng.lat, e.latlng.lng]
    }

    $.ajax({
        url: '/',
        method: 'GET',
        dataType : "json",
        data: data
    }).done(function(response){
        console.log(response);
    }).fail(function(){
        console.log("didnt work");
    })

我的控制器

def index

if request.xhr?
   return "works!"
end

结束 我知道它会命中 request.xhr,因为我在那里放了一个 binding.pry 并且我看到了我的数据,但它似乎没有返回“工作!”。

编辑:我让它按照下面的 cmets 工作。我现在收到回复,但它是一个 html 回复。我返回了字符串“works”,但它似乎没有显示为我的 ajax 响应。

【问题讨论】:

  • 从不输出固定的“它不起作用”消息。它们对调试毫无用处。 .fail(function(e) { console.log(e); }
  • @MarcB 哦,我没有意识到这一点。非常感谢您的提示!
  • 你没有返回 json ......只是一个字符串。默认情况下,它将被视为 html。在您的控制器中指定渲染的输出类型。这个问题的第一个答案应该给你一个很好的起点:stackoverflow.com/questions/12385345/…
  • 如果你想要纯文本格式,请查看apidock.com/rails/ActionController/Base/render 并查找红色文本“Rendering Text”。

标签: javascript jquery ruby-on-rails ruby ajax


【解决方案1】:

如果您查看 Web 控制台,您可能会看到一个错误。你告诉 jQuery 它应该期望返回 JSON,但是你返回的不是有效的 JSON,所以当 jQuery 尝试解析它时,它会失败。

如果您删除 dataType: "json" 或从控制器返回有效的 JSON,它应该可以工作。

【讨论】:

  • 非常感谢 T.J.!我最初认为 dataType 是我的数据应该发送的结构,而不是我应该接收的结构。我现在收到回复,但它是一个 html 回复。我返回了字符串“works”,但它似乎没有显示为我的 ajax 响应。
  • @bwuuu:“我最初认为 dataType 是我的数据应该发送的结构,而不是我应该接收的结构。” 是的,你不是第一个或者只有一个犯了这个错误,ajax 选项的命名可能会好很多。 :-) (data 格式的选项是contentType。)
  • @bwuuu:“我现在收到了响应,但它是一个 html 响应。我返回了字符串“works”,但它似乎没有显示为我的 ajax 响应。”我没有遵循“html 响应”与“ajax 响应”的意思。 (ajax 请求的响应可以是 HTML,这不是问题。)
  • 对不起,我应该更清楚。在我的代码的这一部分[.done(function(response){console.log(response);] 我希望响应是“有效的”,因为这是我在控制器中返回的。但是我得到的响应是索引.html.erb 页面。
  • @bwuuu:啊。抱歉,这部分我帮不了你,Ruby 不是我的菜。我发现了 jQuery 问题并认为我可以回答,但没有意识到 Ruby 方面也有一个单独的问题。
猜你喜欢
  • 2023-03-03
  • 2012-03-14
  • 2015-09-14
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多