當前位置:首頁 » 文件管理 » 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的上傳插件,功能也非常強大,開發也比較容易,網上有很多的資料,可以自行查找。

熱點內容
安卓哪裡填寫apple代碼 發布:2025-02-05 00:28:54 瀏覽:287
oppo手機鎖屏密碼忘記後如何更換 發布:2025-02-05 00:28:19 瀏覽:24
幼兒思維編程 發布:2025-02-05 00:18:21 瀏覽:24
我的世界電腦正版如何進入伺服器 發布:2025-02-05 00:18:06 瀏覽:878
疫情防控健康碼預警機制演練腳本 發布:2025-02-04 23:58:46 瀏覽:38
分治演算法java 發布:2025-02-04 23:41:15 瀏覽:592
安卓app點進去就閃退怎麼回事 發布:2025-02-04 23:36:56 瀏覽:779
宏按鍵編程 發布:2025-02-04 23:05:11 瀏覽:904
微信隱形密碼在哪裡設置 發布:2025-02-04 23:05:01 瀏覽:866
android的補間動畫 發布:2025-02-04 23:03:42 瀏覽:416