2011-11-20 67 views
0

我知道这是流行的问题,人们通过在服务器端编写代理来解决它。但我想,以避免它,我有硬编码回调jsonResponse()文件:Crossdomain JSONP与文本文件和硬编码回调

jsonpResponse({"keys": ["0", "2", "3", "4", "5", "6"], "promoted": [3, 10, 44, 47, 47, 31], "upcoming": [187, 14, 285, 366, 322, 225]}); 

,我想与JQuery.ajax()从另一个域得到它:

$.ajax({ 
    type: "GET", 
    url: URL + filename, 
    dataType: "text jsonp", 
    jsonpCallback: "jsonpResponse", 
    success: function(data) { 
    // wrapping data 
    } 
}); 

,我得到一个错误:

XMLHttpRequest cannot load http://first.domain/filename.jsonp. 
Origin http://second.domain is not allowed by Access-Control-Allow-Origin. 

有没有办法做到我想要的那种方式?我真的必须使用代理吗?如果这是真的,为什么?

+0

我相信你必须在'$ .ajax()'选项中设置['crossDomain:true'](http://api.jquery.com/jQuery.ajax/)。 –

回答

3

您错了$.ajax

您需要通过dataType: "jsonp";它不支持多个值。

请注意,由于您使用的是固定回调,因此您将无法发出多个并发请求,或者他们会窃取对方的回叫。

+1

在'dataType'上调用'text'似乎也有点冗余。 –

+0

谢谢!它给了我警告'资源解释为脚本,但是以MIME类型text/plain传输。所以我确信我必须使用'text jsonp'将它转换为文档中的xml:http://api.jquery。 COM/jQuery.ajax。你的意思是来自单个浏览器的多个并发请求,对吗? – ciembor

+0

@ciembor:这意味着服务器需要发送'text/javascript',但不是。 JSONP只能通过包含脚本的'