当前位置:首页 » 文件管理 » phpjquery跨域上传文件

phpjquery跨域上传文件

发布时间: 2023-07-06 02:09:46

‘壹’ 跨域问题解决方法

跨域?他是浏览器的 同源策略 造成的,是浏览器对javascript施加的安全限制。所谓同源是指:域名、协议、端口均相同。

解决

原理:利用标签具有可跨域的特性,可实现跨域访问接口,需要后端的支持。

服务器在收到请求后,解析参数,计算返还数据,输出messagetow(data)字符串。

缺点:只能发送get请求,无法访问服务器的响应文本(单向请求),即只能获取数据不能改数据。

通过ajax请求不同域的实现,底层不是靠XmlHttpRequest而是script,所以不要被这个方法给迷惑了。

在ajax请求中类型如果是type是get post,其实内部都只会用get,因为其跨域的原理就是用的动态加载script的src,所以我们只能把参数通过url的方式传递

其实jquery内部会转化成

http://192.168.31.137/train/test/jsonpthree?callback=messagetow

然后动态加载http://192.168.1.114/yii/demos/test.php?backfunc=jQuery2030038573939353227615_1402643146875&action=aaron">

http://192.168.1.114/yii/demos/test.php?backfunc=jQuery2030038573939353227615_1402643146875&action=aaron"><script type="text/javascript" src=" http://192.168.31.137/train/test/jsonpthree?callback=messagetow "></script>

http://192.168.1.114/yii/demos/test.php?backfunc=jQuery2030038573939353227615_1402643146875&action=aaron">

http://192.168.1.114/yii/demos/test.php?backfunc=jQuery2030038573939353227615_1402643146875&action=aaron">

Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,确保安全的跨域数据传输。现代浏览器使用CORS在API容器如XMLHttpRequest来减少HTTP请求的风险来源。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。服务器一般需要增加如下响应头的一种或几种:

跨域请求默认不会携带Cookie信息,如果需要携带,请配置下述参数:

​window.name通过在iframe(一般动态创建i)中加载跨域HTML文件来起作用。然后,HTML文件将传递给请求者的字符串内容赋值给window.name。然后,请求者可以检索window.name值作为响应。

iframe标签的跨域能力;

window.name属性值在文档刷新后依旧存在的能力(且最大允许2M左右)。

每个iframe都有包裹它的window,而这个window是top window的子窗口。 contentWindow 属性返回<iframe>元素的Window对象。你可以使用这个Window对象来访问iframe的文档及其内部DOM。

​ HTML5新特性,可以用来向其他所有的 window 对象发送消息。需要注意的是我们必须要保证所有的脚本执行完才发送 MessageEvent,如果在函数执行的过程中调用了它,就会让后面的函数超时无法执行。

​ 前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域,所以只能跨子域

​ 在 根域 范围内,允许把domain属性的值设置为它的上一级域。例如,在”aaa.xxx.com”域内,可以把domain设置为 “xxx.com” 但不能设置为 “xxx.org” 或者”com”。

​ 现在存在两个域名aaa.xxx.com和bbb.xxx.com。在aaa下嵌入bbb的页面,由于其document.name不一致,无法在aaa下操作bbb的js。可以在aaa和bbb下通过js将document.name = 'xxx.com';设置一致,来达到互相访问的作用。

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是server push技术的一种很棒的实现。相关文章,请查看: WebSocket 、 WebSocket-SockJS

**需要注意:**WebSocket对象不支持DOM 2级事件侦听器,必须使用DOM 0级语法分别定义各个事件。

同源策略是针对浏览器端进行的限制,可以通过服务器端来解决该问题,例如nginx

DomainA客户端(浏览器) ==> DomainA服务器 ==> DomainB服务器 ==> DomainA客户端(浏览器)

‘贰’ 怎么实现跨域,异步文件上传并返回处理结果

先讲讲如何跨域,跨域方法很多,访问方式其实与本域名访问没有很大不同。简单列举几个:

  1. 使用window.postMessage实现跨域通信。

  2. 使用ajax异步加载其他网站资源,如加载QQ登陆成功的资料。

  3. 头部的css、js,img标签中的src等,都可以填写外部的链接,都算跨域。

然后再讲讲异步文件上传,异步上传和异步上传文件其实很类似,下面是使用jq的ajaxupload插件进行上传的示例

$.ajaxFileUpload({
url:'upload.action',//用于文件上传的服务器端请求地址
secureuri:false,//一般设置为false
fileElementId:'upload',//文件上传控件的id属性<inputtype="file"id="upload"name="upload"/>
dataType:'json',//返回值类型一般设置为json
success:function(data,status){//服务器成功响应处理函数
alert(data.message);//从服务器返回的json中取出message中的数据,其中message为在struts2中action中定义的成员变量
$("#img").attr("src",data.imagePath);
if(typeof(data.error)!='undefined'){
if(data.error!=''){
alert(data.error);
}else{
alert(data.message);
}
}
},
error:function(data,status,e){//服务器响应失败处理函数
alert(e);
}

});

‘叁’ PHP中运用jQuery的Ajax跨域调用实现代码

可以在页面定义一个调用方法,如下:
复制代码
代码如下:
function
getData(){
$.getJSON("http://123.123.123.123/?callback=?",
{
"m":"data",//
指定php的文件名字
"act":"getdata",//
指定php文件中的方法
"name":"问题儿童"//
传入的参数
},
function(data)
{
//
获得返回值
}
});
}
对应链接下(123.123.123.123)的PHP文件,一般默认先调用index.php文件,通过index.php文件内的方法处理后,转到对应的php文件,并且找到对应的方法,执行之。
index.php代码如下:
复制代码
代码如下:
<?php
/**
*
入口文件
*/
$string
=
$_SERVER["REQUEST_URI"];//
获取访问的url
$m
=
get_m($string);
$file_path
=
"app/".$m.".php";
define('IS_INDEX',true);//
阻止直接访问app目录
require
($file_path);
/**
*
*
获取访问php文件
*
@param
string
$url
*/
function
get_m($url){
$strings
=
explode('m=',
$url);
$res
=
explode("&",
$strings[1]);
return
empty($res[0])?'index':$res[0];
}
?>
data.php代码如下:
复制代码
代码如下:
<?php
/**
*
data文件
*/
$act
=
!empty($_GET['act'])
?
$_GET['act']
:
'';
if
($act
==
'getdata')
{
$name
=
"我的名字叫:".$_REQUEST['name'];
echo
$_REQUEST["callback"]."(".json_encode($name).")";
}
?>
成功调用后,画面就能获取到返回的json数据了。

‘肆’ PHP如何实现跨域传递参数

通常是用json,你可以用php的函数json_encode(),转换为json格式,然后输出进行传递

‘伍’ php如何解决跨域问题

PHP 跨域问题的解决方法常见有以下几种:

  • 使用 JSONP:通过动态创建 script 标签的方式,可以实现从不同的域名请求数据。

  • 使用 CORS(跨域资源共享):通过在服务端设置 Access-Control-Allow-Origin 响应头,来允许特定域名请求数据。

  • 使用代理:通过代理服务器请求数据,避免了跨域问题。

  • 使用 Nginx 反向代理:通过配置 Nginx 反向代理,来实现跨域请求。


以下是使用 CORS通过添加响应头来解决跨域问题的一个例子:

// 设置允许来自任何域名的请求

header("Access-Control-Allow-Origin: *");

// 设置允许请求方法(例如GET、POST等)

header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");

// 设置允许请求头

header("Access-Control-Allow-Headers: X-Requested-With, Content-Type");

// 如果请求是通过 AJAX 发起的,还需要在请求头中添加 X-Requested-With: XMLHttpRequest。

如果对你有所帮助,就点个赞再走吧~

‘陆’ php中上传文件的方法有多少种

一、传统的php写的上传类。
写一个php的上传类,这个方法用到的知识全部是php的,而且技术的难点也不多。
<form method="post" action="upload.php" enctype="multipart/form-data">
<table border=0 cellspacing=0 cellpadding=0 align=center width="100%">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">//隐藏域。这里name必须设置成MAX_FILE_SIZE,其值就是上传文件的最大长度,单位是B,这里我限制成2M
<input name="file" type="file" value="浏览" >
< input type="submit" value="上传" name="B1">
</table>
</form>

服务端利用php的$_FILES['file']['name']来获取文件后缀名,具体的代码自己查找资料看看,这里就不多说了。
总结;这个方法可以用来上传小于2M的文件或者是图片,基本的功能可以实现。
二、利用uploadify插件
这个是利用jQuery的上传插件,上传可以带进度条,容易配置。
总结:可以上传一些大文件,和图片,而且带进度条,可以多文件上传,在WEB中会经常用。
三、利用网络的webupload
WebUploader 是由 Bai FEX 团队开发的一款以 HTML5 为主,FLASH 为辅的现代文件上传组件。在现代的浏览器里面能充分发挥 HTML5 的优势,同时又不摒弃主流IE浏览器,沿用原来的 FLASH 运行时,兼容 IE6+,iOS 6+, Android 4+。采用大文件分片并发上传,极大的提高了文件上传效率。
四、swfupload的插件

这是一个jquery的上传插件,功能也非常强大,开发也比较容易,网上有很多的资料,可以自行查找。

热点内容
维普中文期刊数据库 发布:2025-02-05 00:45:33 浏览:754
安卓哪里填写apple代码 发布:2025-02-05 00:28:54 浏览:290
oppo手机锁屏密码忘记后如何更换 发布:2025-02-05 00:28:19 浏览:27
幼儿思维编程 发布:2025-02-05 00:18:21 浏览:25
我的世界电脑正版如何进入服务器 发布:2025-02-05 00:18:06 浏览:880
疫情防控健康码预警机制演练脚本 发布:2025-02-04 23:58:46 浏览:39
分治算法java 发布:2025-02-04 23:41:15 浏览:593
安卓app点进去就闪退怎么回事 发布:2025-02-04 23:36:56 浏览:780
宏按键编程 发布:2025-02-04 23:05:11 浏览:904
微信隐形密码在哪里设置 发布:2025-02-04 23:05:01 浏览:866