【问题标题】:how to get json data using ajax in cross domain如何在跨域中使用ajax获取json数据
【发布时间】:2025-12-05 21:35:02
【问题描述】:

我要动态从另一个域动态获取数据,我想使用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>

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

【问题讨论】:

  • 该域是否实现了 CORS?
  • http://192.168.10.34:8576/中的应用是否支持跨域请求(CORS)
  • 如果不考虑实现 CORS 或 JSONP

标签: json jquery cross-browser


【解决方案1】:

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

datatype : 'JSONP'

另外,你的跨域(http://192.168.10.34:8576/home/GetJsonData)应该支持jsonp,否则你的请求会失败。

【讨论】:

  • 如果他可以控制应用程序,他最好避免 JSONP 黑客攻击并只实现 CORS
  • 但是由于他已经在使用 jQuery,只要其他域支持它,这是一个简单的更改。
  • 如果他只是发出 GET 请求,那么当然可以。如果他在任何地方发布 POST,那么他不能只使用 JSONP
【解决方案2】:

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

处理此问题非常简单,但请理解这会导致大规模的次要到中级安全问题,因此请务必妥善处理这些问题。

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

【讨论】: