如何在跨域中使用ajax获取json数据

时间:2013-07-29 05:18:06

标签: json jquery cross-browser

我必须动态地从另一个域动态获取数据,我想使用ajax和jquery。我已经完成了以下操作。

<script type="text/javascript">
    $(document).ready(function(){
                $('#getdata').click(function(){
            var sitename = $('#sitename').val();
            var listname = $('#listname').val();
            getdata(sitename, listname);
        })
    });
   function getdata(sitename, listname){
$.ajax({
            url : 'http://192.168.10.34:8576/home/GetJsonData?site='+sitename+'&listname='+listname+'&viewname=',
            datatype : 'JSON',
            type : 'GET',
            crossDomain: true,
            contentType: "application/json; charset=utf-8",
            success : function(data){

                console.log(data)
            },
            error : function(){
                alert('error');
            }
        })
}
</script>

但它只是返回错误。为什么?我做错了什么吗? 欢迎任何帮助/建议。感谢。

2 个答案:

答案 0 :(得分:0)

您不能从JavaScript所源自的域以外的任何域请求数据。对于这样的情况,您应该使用JSONP(带填充的JSON)。在jQuery ajax函数中将dataType更改为JSONP。像这样......

datatype : 'JSONP'

此外,您的跨域(http://192.168.10.34:8576/home/GetJsonData)应支持jsonp,否则您的请求将失败。

答案 1 :(得分:0)

使用JSONP hack的替代方法是允许在您的应用程序上进行跨源资源共享。

处理这个问题非常简单,但要明白,这会大规模地打开轻微到中间的安全问题,因此请务必妥善处理它们。

只需将服务器应用程序中的Access-Control-Allow-Origin响应标头设置为*即可。 CORS请求还会发出OPTIONS预检请求,因此您可以选择是否处理这些请求。