ajax跨域请求数据

最近开始接触ajax的跨域请求问题,相比网上说的一大堆,我这里就说得比较浅显了。

关于为什么要跨域这个问题,实际的需求是当网站项目部署在一个域名上的时候,分域可以很好地解决网站卡顿问题(拥有多台服务器就另当别论)。

这种做法现在很常见,多看几个网站细心点就可以看出点门道。

下面对比一下跨域之前的ajax请求与跨域之后的请求:

之前:

 $.post(wwwUrl + "/Home/DeleteById", { Id: id }, function (data) {
                alert(data);
                window.location.reload();
            });

这里调用的是post方式(一般比较方便快捷,但是对ajax不熟练的话不推荐一开始就这样说使用),也可以用get。

要说的是,跨域请求并不支持post方式!也不是说完全不支持,使用post请求在做跨域的时候对编码类型有限制,只允许content-type为

application/x-www-form-urlencoded、multipart/form-data 或者 text/plain中一个。

........

之后:

 $.ajax({
                type: "GET",
                async: false,
                url: wwwUrl + "/Home/Index",
                data: { Id: id },
                dataType: "jsonp",
                jsonp: "callback", //传递给请求处理程序或页面的,标识jsonp回调函数名(一般为:callback).
                jsonpCallback: function (){}, //callback的function名称.
                success: function (data) {
                    alert(data);
                    window.location.reload();
                }
            });

这里可以对比一下两种方式的区别。

jsonpCallback属性后面接的是一个匿名函数,事实上这里应该是调用从另一个“域”返回的函数名,函数在本域的js里面,返回回来直接调用就行,记得带参!

服务端的代码就不展示了,里面就是传个callback参数验证是否为空,肯定条件return一个JSON对面,包含操作数据返回时的状态Message,success里面调用的时候就是data.Message。

百度文库有相关的详细说明,在此就不赘述。
原文地址:https://www.cnblogs.com/sunshine-wy/p/4708953.html