jQuery实现跨域请求

我们都知道,xhr(XMLHttpRequest)是不允许跨域的。而jQuery的ajax方法是基于xhr的,所以,直接使用它也是无法跨域的。一般的,我们是如下使用$.ajax方法的:

$.ajax({
  type : "GET",
  url : "the path of server",
  dataType : "json",
  success : function(res) {
      //这里写获取相应数据的代码
  }
});

我们这样调用的话,就是xhr请求。如果要实现跨域的话,就必须要使用动态脚本注入的技术。当然了,什么是动态脚本注入技术在这里我就不说了,有兴趣的可以自己去搜一下。jQuery已经帮我们封装好了jsonp的请求方法,我们直接调用它就行了,不必要知道他的底层是怎么实现的。jsonp请求的代码如下,只需要把dataType: "json"改成dataType: "jsonp"就行了:

$.ajax({
  type : "GET",
  url : "http://zhangzhanyu.nfreehost.com/jsonp.php",
  dataType : "jsonp",
  success : function(json) {
    alert(json.msg);
  }
});
 

但是,直接这样子还不行的,需要注意的是,跨域是要前端和后端配合才可以完成的。我们上面只是完成了前端的部分。因此,我们请求的php文件的代码要写成如下格式:

<?php
    $callback = $_GET[‘callback‘ ];
    echo "{$callback}({‘msg‘:‘this is a jquery jsonp test message!‘})";
?>

我们会发现,如果我们使用jsonp请求的话,会把一个名为callback的参数也传过来了,我们后台需要获取到这个参数值(事实他的值是一个函数名),然后再把需要返回到前端的数据放到这个callback里面当做参数就行了。

ps:由于做前端的本地不一定都有php环境,不方便测试。所以我把这个测试的php文件上传到了服务器,地址是http://zhangzhanyu.nfreehost.com/jsonp.php。需要测试的,可以直接把ajax方法里的url设置成这个地址就行了。

时间: 2024-10-07 10:37:08

jQuery实现跨域请求的相关文章

使用jquery实现跨域请求数据

首先处理服务器代码,使返回的数据符合特定的格式,为了方便这里使用了php test.php代码如下 1 <?php 2 $con = mysql_connect("localhost","root","root"); 3 mysql_select_db("test", $con); 4 5 $result = mysql_query("select username,password from user&quo

jquery ajax跨域请求webservice webconfig配置

jquery ajax跨域请求webservice web.config配置 <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <webServices> <protocols> <add name="HttpGet"/> <add name="Htt

NodeJ node.js Jquery Ajax 跨域请求

Jquery + Ajax 跨域请求 说白了就是前台请求ajax数据(JSON)但是请求的数据不在本地的绝对路径下,接口数据 是没有这个安全性的我对外公开的接口数据,只要你找到接口你就可以使用里面的数据 ,但是在浏览器端他做了一套机制就是 不让你随意的访问别人服务器的外来接口,如果是好的数据的化  你可以学习使用,如果是一些恶意数据,对服务器对个人来说都是没有安全性的,目前明白一点就是 阻止跨域请求就是 浏览器的原因,也算是ajax的原因,所以这个前台你是无能为力的. 解决办法: 服务器端进行权

jQuery ajax跨域请求的解决方法

在Ajax应用中,jQuery的Ajax请求是非常容易而且方便的,但是初学者经常会犯一个错误,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数据,事实上简单来说请求同一个域名下的url或者说用不带http的绝对路径和相对路径请求是没有任何问题的,如果请求外部资源,那么这就称为跨域请求. 由于安全性的问题,浏览器默认不支持跨域调用,晚上也有很多方法,各有优缺点,但是有一个比较好的解决方法这也是jQuery1.2之后官方推荐的,那就是在客户端

jquery Ajax跨域请求

这是jquery api文档对跨域请求的解析:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用JSONP类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求.如果要指定回调函数的参数名来取代默认的callback,可以通过设置$.ajax()的jsonp参数. 我们通过demo来参悟上面的解析: $.ajax({ type: "get&

jquery实现跨域请求(复制)

很多开发人员在使用jquery在前端和服务器端进行数据交互,所以很容易会认为在前端利用jquery就可以读取任何站点的数据了.近日在进行开 发时,因为要和第三方公司的一个项目进行数据的共享,因为考虑多不占用服务器的资源,遂决定直接在html进行数据的读取,不走服务器端进行中转了.然后 正好就遇到了浏览器端跨域访问的问题. 跨域的安全限制都是指浏览器端来说的,服务器端不存在跨域安全限制的问题. 目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jso

jQuery AJAX 跨域请求

跨域请求 只要 dataType : 'jsonp',  jsonp:"jsoncallback",  然后返回一个json格式的就可以了 <!doctype html> <html> <head> <meta charset="UTF-8"> <title>|体检系统</title> </head> <body> <script src="http://

jQuery jsonp跨域请求详解

跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具有相同的源,否则就是不同源的. 如果要在js里发起跨域请求,则要进行一些特殊处理了.或者,你可以把请求发到自己的服务端,再通过后台代码发起请求,再将数据返回前端. 这里讲下使用jquery的jsonp如何发起跨域请求及其原理. 先看下准备环境:两个端口不一样,构成跨域请求的条件. 获取数据:获取数据

jQuery jsonp跨域请求

跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具有相同的源,否则就是不同源的. 如果要在js里发起跨域请求,则要进行一些特殊处理了.或者,你可以把请求发到自己的服务端,再通过后台代码发起请求,再将数据返回前端. 这里讲下使用jquery的jsonp如何发起跨域请求及其原理. 先看下准备环境:两个端口不一样,构成跨域请求的条件. 获取数据:获取数据

jquery ajax跨域请求webservice

有种方式可以通过JSONP方式来请求 这里具体介绍如何通过修改配置文件来实体AJAX跨域请求WEBSERVICE WEBSERVICE的类声名 /// <summary> /// MobileService 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)