更新1:
如果我输入
,这就是我在浏览器中获得的内容http://www.remote_host.com/feed.php?callback=jsonpCallBack
{
"rss": {
"channels": [
{
"title": "title goes here",
"link": "http://www.remote_server.com/feed.php",
"description": "description goes here",
"items": [
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
},
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
},
{
"title": "item title goes here",
"link": "item link goes here",
"pubDate": "item date goes here",
"description": "item description goes here"
}
]
}
]
}
}
所以这不是jsonp?
原始问题:
我有以下脚本,我试图从远程主机获取json数据:
$(document).ready(function() {
get_json_feed();
function get_json_feed() {
$.ajax({
url: 'http://www.remote_host.com/feed.php?type=json',
type: 'GET',
dataType: 'jsonp',
error: function(xhr, status, error) {
alert("error");
},
success: function(json) {
alert("success");
}
});
}
});
但由于某种原因,我收到错误并发出警告:
警告:资源解释为 脚本但使用MIME类型传输 text / html的。
错误:未捕获的SyntaxError: 意外的令牌:
我做错了什么?
答案 0 :(得分:7)
JSONP"协议"依赖于使用表单的JavaScript声明回复您的请求的网站
someFunction( someJSON )
函数的名称作为代码中的参数提供,其理念是响应脚本一旦被浏览器使用和解释,将导致使用已解析的JSON blob调用该函数 - 就是说,一个JavaScript对象。 jQuery库将为您完成一些bookeeping工作,甚至可以创建要调用的全局范围函数(这将是仅调用您提供的回调的代码作为" success"参数)
因此,您应该检查该服务器的实际响应是什么样的。听起来好像它可能不是准备以这种方式响应的服务器。您可能需要确保您的网址上有一个额外的参数,其形式为" callback =?"。
答案 1 :(得分:6)
我不确切知道您面临的错误,但有一些有用的提示可以使用jsonp
here
error
:不会为跨域脚本和JSONP请求调用此处理程序。 在ajax参数中写jsonp: 'callback', jsonpCallback: 'jsonpCallback'
。
将jsonp
设置为回调,然后将jsonpCallback
设置为jsonpCallback,使查询字符串看起来像这样:
http://domain.com/jsonp-demo.php?callback=jsonpCallback&name=watever
使用JSONP加载JSON块。将在您的网址末尾添加额外的?callback=?
以指定回调。
您的完整脚本如下所示:
<script>
$(document).ready(function(){
$("#useJSONP").click(function(){
$.ajax({
url: 'http://domain.com/jsonp-demo.php',
data: {name: 'Chad'},
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'jsonpCallback',
success: function(){
alert("success");
}
});
});
});
function jsonpCallback(data){
$('#jsonpResult').text(data.message);
}
</script>
<强> Example here 强>
答案 2 :(得分:3)
看起来服务器返回错误的Content-type标头。