我使用下面的脚本发送跨域ajax调用。
$(document).ready(function()
{
var uniqcod=$(".abc").attr('id');
$.ajax({
url:'abc.com',
data:{uniId:uniqcod},
dataType: 'jsonp',
jsonp: 'callback',
crossDomain: true,
jsonpCallback:"jsonpCallback",
success: function(result){},
error: function() {console.log('Failed!');
console.log(arguments); }
});
function jsonpCallback(data){
document.getElementById(uniqcod).innerHTML=data.content;
}
});
但问题是这个脚本没有进入jsoncallback函数。每次调用此函数时,它都会在控制台中显示失败的消息。
答案 0 :(得分:0)
如果您请求的服务器发送回CORS(跨域资源共享)标头,则只能执行跨域请求。
如果它是您可以控制的服务器,那么您只需要进行更改。
如果没有,您需要通过 控制的服务器代理数据,以添加相应的标题。
编辑:或者如果它是JSONP,那么您需要确保您请求的服务器实际上支持JSONP。
答案 1 :(得分:0)
除非经过身份验证,否则无法使用jQuery进行跨域调用。但是,您可以使用YQL(Yahoo Query Language)并进行一些调用并获取xml,json格式的数据。
请参阅下面的示例。
function requestCrossDomain( site, callback ) {
// If no url was passed, exit.
if ( !site ) {
alert('No site was passed.');
return false;
}
// Take the provided url, and add it to a YQL query. Make sure you encode it!
var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=xml&callback=cbFunc';
// Request that YSQL string, and run a callback function.
// Pass a defined function to prevent cache-busting.
$.getJSON( yql, cbFunc );
function cbFunc(data) {
// If we have something to work with...
if ( data.results[0] ) {
// Strip out all script tags, for security reasons.
// BE VERY CAREFUL. This helps, but we should do more.
data = data.results[0].replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '');
// If the user passed a callback, and it
// is a function, call it, and send through the data var.
if ( typeof callback === 'function') {
callback(data);
}
}
// Else, Maybe we requested a site that doesn't exist, and nothing returned.
else throw new Error('Nothing returned from getJSON.');
}
}