Javascript Ajax调用不是';我什么也不退

Javascript Ajax调用不是';我什么也不退,javascript,jquery,Javascript,Jquery,我基本上是javascript和jQuery的初学者,所以请耐心听我说 我有一个正在运行的Spark API和一个通过ajax调用使用它的web前端 我正在尝试调用这个函数 函数getSpotifyURL(ms,名称){ $.ajax({ url:“http://localhost:8081/playlist?ms=“+ms+”&name=“+name, 数据类型:“json”, }) .完成(功能(数据){ 控制台日志(数据); }) } 该方法位于以下外部: $(文档).ready(函数(

我基本上是javascript和jQuery的初学者,所以请耐心听我说

我有一个正在运行的Spark API和一个通过ajax调用使用它的web前端

我正在尝试调用这个函数

函数getSpotifyURL(ms,名称){ $.ajax({ url:“http://localhost:8081/playlist?ms=“+ms+”&name=“+name, 数据类型:“json”, }) .完成(功能(数据){ 控制台日志(数据); }) } 该方法位于以下外部:

$(文档).ready(函数(){
它在外部的原因是,我调用它时出错,如果它在$(document.ready)之内,就说它“未定义”

Spark方法应该返回一个字符串(,当您直接通过浏览器尝试时,它会返回)

我调用getSpotifyURL方法的方式是通过html按钮的“onclick”进行的。如下所示:

问题: .done块在我的代码中不起任何作用。控制台中不会打印任何内容

我所尝试的:

  • 在ajax部件中使用“success”而不是.done
  • 使用$(document.ready)(函数(){…}放置函数
我知道你可能需要更多的信息来帮助我,但我不确定现在还能提供什么信息。所以如果你有什么需要知道的,尽管问

想法

已解决!


我是个哑巴,忘了删除数据类型:“json”,因为此实例中的Spark服务器返回的是字符串,而不是json对象。无论如何,感谢大家的输入。非常感谢。

我认为问题在于当您将函数绑定到onclick时。正如您在浏览器控制台上看到的,存在语法错误

函数getSpotifyURL(ms,名称){ 控制台日志(“http://localhost:8081/playlist?ms=“+ms+”&name=“+name”); }


将函数放入
$(document).ready(function(){…});
调用时获得
未定义方法的原因是使用
onclick
属性调用函数。
$(document).ready(…)
不在全局上下文中,无法确定
onclick
属性的位置,因此无法从文档中识别它。准备就绪导致
未定义的方法出现错误

发送Ajax请求时,您还需要指定您正在发出的请求类型(
GET
POST
)。我还建议重新构造Ajax调用,使其看起来更像@Moe的答案

如果你想把它放到DOM里面,请考虑以下内容:

HTML

<!-- I gave the link a class name and removed the onclick= attribute -->
<a href="#" class="create-spotify-playlist">Create Spotify playlist for this trip</a>

JavaScript

$(document).ready(function() {

    // I gave the <a> link a click handler
    $(".create-spotify-playist").on("click", function(e) {
        e.preventDefault();  // prevents link from requesting

        var ms = ??   //I'm not sure where you're getting your parameters from,
        var name = ?? //so you will probably have to figure out how to get those in here yourself

        $.ajax({
            type: "GET",
            url: "http://localhost:8081/playlist",
            data: { ms: ms, name: name },
            success: function(data) {
                console.log("Success: " + data);
            },
            error: function(data) {
                console.log("Error: " + data);
            }
        });
    });
});
$(文档).ready(函数(){
//我给了链接一个点击处理程序
$(“.create spotify playist”)。在(“单击”上,函数(e){
e、 preventDefault();//阻止链接请求
var ms=??//我不确定从哪里获取参数,
var name=??//所以您可能需要自己弄清楚如何将它们放在这里
$.ajax({
键入:“获取”,
url:“http://localhost:8081/playlist",
数据:{ms:ms,name:name},
成功:功能(数据){
console.log(“成功:+数据);
},
错误:函数(数据){
console.log(“错误:+数据”);
}
});
});
});

我给了链接一个点击处理程序,并将其放在
$(文档)中。ready
,通过从前面删除
onclick
属性,现在可以从
$(文档)中触发它。ready

我相信
.done()
已弃用。您能在开发人员工具的“网络”选项卡中找到打开的请求吗?将
控制台.log(数据);
更改为控制台.log(数据+“123”)
以便您可以实际查看它是否到达了该部分。@Fluinc不会被打印为
未定义的
null
控制台。log
已经到达了吗?在getSpotifyURL中,在调用$.ajax之前记录ms和name,因为我认为您没有将您认为传递给getSpotifyURL的参数传递给getSpotifyURL。只需使用alert under如果警报调用,您可以使用函数。然后从任何站点复制粘贴ajax语法并重试。只需检查您的URL并使用inspect element>network进行调试。我忘了提到这是通过javascript生成的,这就是为什么我认为我必须使用引号的原因。尽管问题现在已经解决(在#0中查看我的编辑),我考虑了你的解决方案。我选择onclick的原因是我需要参数,因为会有很多js生成的链接具有不同的值(ms和name)。我曾尝试过你的方法,但无法使其正常工作。