Ajax请求无法处理回调

时间:2014-11-03 05:33:34

标签: javascript jquery ajax request

$(document).ready(function(){

    var requestURL = 'http://www.football-data.org/soccerseasons?callback=?';
    $.ajax({
     type: 'GET',
     dataType: 'json',
     url: requestURL,
    success: function(data){
        console.log(data)
        }
    });
});

这是我的代码, 老实说我没有任何线索,我一直试图在网上找到答案,并查看其他人的代码,我只是不知道。可能答案真的很愚蠢,但无论如何,为了对数据做更多的事情,我真的需要通过这种情况。 所以,我有这个代码,我想在Html中将值解释为不同的东西,但为此,我需要值。我知道我正在做一个积极的请求,因为我可以在回复中看到。但看起来没有触发成功功能。 我只是想知道为什么我无法在控制台中看到从这个json文件中提取的所有数据。 谢谢,对不起,如果你们认为这个问题太愚蠢了:(

9 个答案:

答案 0 :(得分:1)

评论数据类型如下所示并尝试此操作。

(文档)$。就绪(函数(){

var requestURL = 'http://www.football-data.org/soccerseasons?callback=?';
$.ajax({
 type: 'GET',
// dataType: 'json',           // comment datatype 
 url: requestURL,
success: function(data){
    console.log(data)
    }
});

});

答案 1 :(得分:1)

您希望首先确保服务器返回正确的jsonp响应,因为您正在调用跨域。然后你必须使用dataType:'jsonp'。而且你不需要成功或完全回调;你需要一个回调函数,一旦返回数据就会调用它。



function myCallback( data ) {
  $('pre.out').text( JSON.stringify(data) );
};
$(document).ready(function(){

    var requestURL = 'http://www.football-data.org/soccerseasons?callback=?';
    $.ajax({
     type: 'GET',
     dataType: 'jsonp',
     jsonpCallback: 'myCallback',
     url: requestURL
    });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre class="out"></pre>
&#13;
&#13;
&#13;

如果你检查开发工具的网络选项卡,你会看到返回的数据,但它没有像jsonp一样正确地包装在回调函数中。

服务器响应:

[{"id":351,"caption":"1. Bundesliga 2014/15",...."lastUpdated":"2014-11-03T03:58:10Z"}]

<强>更新

这是服务器发送正确的jsonp的简单示例:

&#13;
&#13;
$.ajax( 'http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&callback=?', {
  dataType:'jsonp',
  jsonpCallback:'myCallback'
});
function myCallback( data ) {
    $('pre.out').text( JSON.stringify(data) );
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre class="out"></pre>
&#13;
&#13;
&#13;

服务器响应:

 myCallback({"coord":{"lon":139,"lat":35},"sys"....."cod":200});

答案 2 :(得分:0)

试试这个,这可能有效

 $(document).ready(function(){

        var requestURL = 'http://www.football-data.org/soccerseasons?callback=?';
        $.ajax({
         type: 'GET',
         dataType: 'json',
         url:'requestURL'}). success: function(data){
            console.log(data);
            }
        });

答案 3 :(得分:0)

你的控制台是否说这是一个交叉来源请求?如果是这样,您可能需要使用jsonp或代理。

<强> EDITED

删除dataType:'json',它应该可以正常工作

原因是你的网址中有回调,而jquery足够智能来检测它。但是没有调用回调,所以它出错了。你还应该定义一个错误处理程序。如果删除dataType,jquery将自动检测数据类型,因此它可以工作。

答案 4 :(得分:0)

请试一试。

dataType: 'jsonp'

dataType:jsonp用于跨域请求,即对不同域的请求和dataType:json用于相同域的相同源请求。

答案 5 :(得分:0)

好的,问题是两部分。第一个是源自JSON标记的解析错误。如果从请求中删除JSON数据类型,您将看到的错误是跨站点脚本错误。请参阅下面的代码(如果您使用complete打印到控制台,您将每次都获得信息。您还应该考虑使用断点)

$(document).ready(function(){
    console.log("doc ready");
    var requestURL = 'http://www.football-data.org/soccerseasons?callback=?';
    $.ajax({
     type: 'GET',
     url: requestURL,
     complete: function(jqXHR, textStatus){
        console.log(textStatus);
     }
    });
});

答案 6 :(得分:0)

我不确定你面临的问题是什么,但正如其他人提到的那样看起来像是一个CORS问题。我写了一篇关于CORS here的帖子,它解释了CORS并展示了ajax的例子。通过CORS GET请求ajax看起来像这样:

ajaxOptsCrossOrigin = {
    xhrFields: {withCredentials: true}, //adds cookies, credentials
    url: "https://"+server_name+"/get_link/",
    dataType: 'json',
    crossDomain: true,
    data: data_vals,
    success: function(resp){
        //do something on success
    },
};
jQuery.ajax(ajaxOptsCrossOrigin);
//In your case:
ajaxOptsCrossOrigin = {
    xhrFields: {withCredentials: true}, //adds cookies, credentials
    url: "http://www.football-data.org/soccerseasons?callback=?",
    dataType: 'json',
    crossDomain: true,
    //data: data_vals,
    success: function(resp){
        //do something on success
        alert(data);
    },
};
jQuery.ajax(ajaxOptsCrossOrigin);

请注意,您正在与之交互的服务器应该启用CORS。希望它有帮助

答案 7 :(得分:0)

它不起作用的原因是因为football-api没有返回jsonp。但它使用CORS(跨源资源共享)。网站上有一些示例代码。我已经给出了下面的示例代码,并为您创建了一个小提琴。您所要做的就是用您通过电子邮件发送的密钥替换[ENTER API KEY HERE!]文本。 (如果您还没有API密钥,只需访问该网站并点击“免费API密钥”并输入您的电子邮件。他们会向您发送一封。

在小提琴中输入按键点击后,您将看到一个灯具列表。

Demo Fiddle

        $.ajax({
            headers: { 'X-Auth-Token':'[ENTER API KEY HERE!]' },
            url: 'http://api.football-data.org/alpha/soccerseasons/354/fixtures?timeFrame=n7',
            dataType: 'json',
            type: 'GET',
        }).done(function(response) {   
            var regex = /.*?(\d+)$/; // the ? makes the first part non-greedy
            var fixtureTable = "";
            console.log(response);

            fixtureTable += "<table>";

            $.each(response.fixtures, function(i,v){
                fixtureTable += "<tr><td>"+v.homeTeamName+"</td><td><strong>VS</strong></td><td style='text-align:right;'>"+v.awayTeamName+"</td><td>"+$.format.date(v.date, "ED MMM yyyy hh:mma")+"</td></tr>";
            });

            fixtureTable += "</table>";

            $('#fixtureTable').html(fixtureTable);
        }); 

答案 8 :(得分:0)

您必须注册才能获取API令牌并使用它,如下所示:

$.ajax({
  headers: { 'X-Auth-Token': 'YOUR API TOKEN' },
  url: 'http://api.football-data.org/v1/competitions/440/fixtures?timeFrame=n20',
  dataType: 'json',
  type: 'GET',
}).done(function(data) {
   console.log(data);
})