Javascript $.ajax不起作用,但$.getJSON起作用
我正在尝试获取pininterest的共享计数,下面的代码运行良好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
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
如果不起作用,尝试在完成
中返回,就像我以前看到的那样。我认为这与您的问题相同,我将尝试用这种方式编辑我的答案什么是测试?它说测试没有定义?对不起,这是一个错误,我刚刚删除了它