我有一个Web服务,我正在尝试通过JSON获取数据。如果我在同一服务器内访问工作正常,但当我上传到托管它不起作用。问题是“?callback =?” PARAM。使用chrome我看到返回的json,但下面的代码没有在输入文本中显示:
<html><head> <script src="jquery-1.7.1.min.js" type="text/javascript" ></script>
<script>
$(document).ready(function()
{
$("#cons").click(function(){
alert("wait");
var nombre = $("#nombre").attr('value');
if(nombre!==''){
var today = new Date();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
$.getJSON("http://grup15.mihost.info/index.php/WS/Api/user/nombre/"+nombre+"/ano/"+ yyyy +"/mes/"+mm+"/format/json?callback=?", function(data) {
var htmlResult = "";
$.each(data, function(key, val) {
htmlResult += val.total;
});
$('#gasto').attr('value',htmlResult);
});
}else{
alert("Nombre Necesario");
}
});
});
</script>
</head>
<body>
<table>
<tr>
<td>Nombre:</td>
<td><input type="text" id="nombre" value=""/></td>
</tr>
<tr>
<td>Gasto De este mes:</td>
<td><input id="gasto" type="text" value=""/></td>
</tr>
<tr><td colspan="2"><button id="cons" type="button">Consultar</button></td></tr>
</table>
</body>
如果我删除了“?callback =?chrome shows:”,Access-Control-Allow-Origin不允许“ 我该怎么办?谢谢你的帮助!
答案 0 :(得分:2)
您不能像这样跨域进行AJAX请求。请改用 JSONP 。
答案 1 :(得分:2)
?callback=?
表示JSONP,这意味着服务器应该返回JSONP,而不是JSON。
JSONP实际上是一个脚本,看起来像这样:
func({data: 123, test: 456});
您的数据需要包含在callback
参数的值中。
答案 2 :(得分:1)
Javascript遵循“同源”政策,如下所述:
http://en.wikipedia.org/wiki/Same_origin_policy
这是一种防止跨站点脚本编写的安全措施。
您可以考虑在此讨论的解决方法: Ways to circumvent the same-origin policy
答案 3 :(得分:0)
如果你不能创建一个JSONP,你可以构建一个包装函数来获取你的数据。也许是通过PHP。
看看:craigslist rss feed。我的解决方案是使用XML构建,但应该很容易转换为使用JSON。