0

我正在使用下面的脚本来发送跨域 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 函数。每次我调用此函数时,它都会在控制台中显示失败消息。

4

2 回答 2

0

除非您经过身份验证,否则您不能使用 jQuery 进行跨域调用。但是,您可以使用 YQL(雅虎查询语言)并进行一些调用并获取 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.');  
    }  
}  
于 2013-04-09T12:40:46.100 回答
0

只有当您请求的服务器发回 CORS(跨域资源共享)标头时,您才能执行跨域请求。

如果它是您控制的服务器,那么您只需要进行更改。

如果没有,您需要通过您控制的服务器代理数据添加适当的标头。

编辑:或者如果它是 JSONP,那么您需要确保您请求的服务器实际上支持 JSONP。

于 2013-04-09T12:38:20.463 回答