跨域调用js

JavaScript023

跨域调用js,第1张

通过script标签来请求,原理就是在本域内的A内生成一个JS标签,它的SRC指向请求的另外一个域的某个页面B,这个src里面通常会加一个A页面定义好的回调函数,B返回数据即可,可以直接返回调用这个回调函数,这种跨域的通信方式被称为JSONP,此方案存在的缺陷是, script的src属性完成该调用时采取的方式时get方式,如果请求时传递的字符串过大时,可能会无法正常运行。

满意请采纳。

1.什么是跨域

经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题.

跨域问题是由于javascript语言安全限制中的同源策略造成的.

简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合.

2.解决方案:

服务器端:

        protected void Page_Load(object sender, EventArgs e)

        {

            string result = "callback({\"name\":\"zhangsan\",\"date\":\"2012-12-03\"})"

            Response.Clear()

            Response.Write(result)

            Response.End()

        }

客户端:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title></title>

    <script type="text/javascript">

        var result = null

        window.onload = function () {

            var script = document.createElement("script")

            script.type = "text/javascript"

            script.src = "http://192.168.0.101/ExampleBusinessApplication.Web/web2.aspx"

            var head = document.getElementsByTagName("head")[0]

            head.insertBefore(script, head.firstChild)

        }

        function callback(data) {

            result = data

        }

        function b_click() {

            alert(result.name)

        }

    </script>

</head>

<body>

    <input type="button" value="click me!" onclick="b_click()" />

</body>

</html>

解决js跨域问题有以下一种方式

使用jsonp

服务端代理

服务端设置Request Header头中Access-Control-Allow-Origin为指定可获取数据的域名