Javascript $.ajax不起作用,但$.getJSON起作用

Javascript $.ajax不起作用,但$.getJSON起作用,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我正在尝试获取pininterest的共享计数,下面的代码运行良好 var pi_like_count = 0; PIUrl = "https://api.pinterest.com/v1/urls/count.json?url=" + url1 + "&format=jsonp" + '&callback=?' $.getJSON(PIUrl, function (data) { pi_like_count = data.count; alert(pi_lik

我正在尝试获取pininterest的共享计数,下面的代码运行良好

var pi_like_count = 0;
PIUrl = "https://api.pinterest.com/v1/urls/count.json?url=" + url1 + "&format=jsonp" + '&callback=?'
$.getJSON(PIUrl, function (data) {
    pi_like_count = data.count;

    alert(pi_like_count +' pininterest');
});
但当我试图把下面的代码问题来了

var pi_like_count = 0;
PIUrl = "https://api.pinterest.com/v1/urls/count.json?url=" + url1 + "&format=jsonp" + '&callback=?'
$.ajax({
    method: 'GET',
    url: PIUrl,
    success: function (data) {
        pi_like_count = data.count;

        alert(pi_like_count + ' pininterest');
    },
    error: function (data) {
        alert('error' + data.count + ' pininterest');
        console.log(data);
    },
    async: false
}); 
Console.log错误为

promise: function promise()
readyState: 4
responseText: "{\"error\":\"Invalid callback, use only letters, numbers, square brackets, underscores, and periods.\"}"
这个问题是在我使用$.ajax时出现的,我也尝试过同样的方法来获取facebook的共享数,并且效果很好,但pininterest不起作用

更多解释

 function GetScores(url) {
    var FBUrl, TWUrl, LNUrl, GLUrl, PIUrl;
    var url1 = "";
    url1 = encodeURIComponent(url1 || url);  

    //Fetch counters from PInterest
    var pi_like_count = 0;
    PIUrl = "https://api.pinterest.com/v1/urls/count.json?url=" + url1 + "&format=jsonp" + '&callback=?'  
    $.ajax({
        type: 'GET',
        dataType: 'json',
        url: PIUrl,
        success: function (data) {
            pi_like_count = data.count;
            alert(pi_like_count + ' pininterest');
        }        ,
        complete: function (jqXHR, data) {
            pi_like_count = data.count;
            alert(pi_like_count + ' pininterest complete');
        },
        error: function (req, status, error) {
            alert('error');
        },
        async: false
    });

    //Fetch counters from Facebook
    var fb_share_count = 0;

    FBUrl = "https://graph.facebook.com/?id=" + url1 + "&format=json";

    $.ajax({
        type: 'GET',
        url: FBUrl,
        success: function (data) {
            fb_share_count = data.share.share_count;
            alert(fb_share_count+' facebook');
        },
        async: false
    });
    var totalshare = parseInt(fb_share_count) + parseInt(pi_like_count);

    return totalshare;
    }
此处是在显示pinterest count警报后,即当此函数第二次调用时,在pinterest给出旧计数后,获取Facebook计数和总共享计数。

尝试:

function GetScores(url, onCountTotal) {
    var FBUrl, TWUrl, LNUrl, GLUrl, PIUrl;
    var url1 = "";
    url1 = encodeURIComponent(url1 || url);
    //Fetch counters from PInterest
    var pi_like_count = 0;
    PIUrl = "https://api.pinterest.com/v1/urls/count.json?url=" + url1 + "&format=jsonp" + '&callback=?';
    $.ajax({
        type: 'GET',
        dataType: 'json',
        url: PIUrl,
        success: function (data) {
            pi_like_count = data.count;
            var fb_share_count = 0;
            FBUrl = "https://graph.facebook.com/?id=" + url1 + "&format=json";
            $.ajax({
                type: 'GET',
                dataType: 'json',
                url: FBUrl,
                success: function (data) {
                    fb_share_count = data.share.share_count;
                    var totalshare = parseInt(fb_share_count) + parseInt(pi_like_count);
                    onCountTotal(totalshare);
                    //alert(fb_share_count + ' facebook');
                },
                error: function (data) {
                    onCountTotal(-1);
                },
                async: true
            });
        },
        error: function (req, status, error) {
            onCountTotal(-1);
        },
        async: true
    });
}

//EXAMPLE HERE CALL FUNCTION WITH CALLBACK
GetScores("http://www.google.com", function (count) {
    alert("Count = " + count);
});

以下是您可以尝试使用回调的内容:

var result = 0; 

function handleData(data) {
    result+=data.count;
}

function GetScores(url) {
    var url1 = encodeURIComponent(url1 || url);
    getFb(url1).done(handleData);
    getPi(url1).done(handleData);
    return result;
}

function getPi(url1){

    var PIUrl = "https://api.pinterest.com/v1/urls/count.json?url=" + url1 + "&format=jsonp" + '&callback=?'; 

    return $.ajax({
        type: 'GET',
        dataType: 'json',
        url: PIUrl
    });
}

function getFb(url1){

    var FBUrl = "https://graph.facebook.com/?id=" + url1 + "&format=json";

    return $.ajax({
        type: 'GET',
        url: FBUrl
    });
}
您可以适应需要共享的每个平台,只需在
GetScores
中添加另一个函数并正确处理返回的json即可

您还可以执行以下操作:

function getFb(url1, callback){

var FBUrl = "https://graph.facebook.com/?id=" + url1 + "&format=json";

    $.ajax({
        type: 'GET',
        url: FBUrl,
        success: callback
    });
}

getFb(function(data){
    result+=data.count;
});

尝试根据
警报的结果调整代码
s

尝试向AJAX参数添加
数据类型:“json”
&callback=?
在中无效JSONP@Andy我的主要问题是我的返回函数在pinterest计数被获取后被调用,因此,为了解决这个问题,我使用了$.ajax,使用async:false,在将数据类型编辑为json后,函数工作正常,但在函数get returns后仍会调用它。您可以使用
complete
确保在查询完成时获得数据。请看,您可能甚至不需要
async:false
@LorenzoCanavaggio仍然会出现相同的问题我之前尝试过此方法,但此函数在我的函数get返回值后获取结果请解释更多。等待我正在编辑。这是第一次返回va;你测试过没有工作吗?从我的角度看,我收到Count=46041149它不起作用第一次返回在pinterest给出值后完成查看我的编辑:直接返回
数据。Count
如果不起作用,尝试在
完成
中返回,就像我以前看到的那样。我认为这与您的问题相同,我将尝试用这种方式编辑我的答案什么是测试?它说测试没有定义?对不起,这是一个错误,我刚刚删除了它