完全跨域 非同步上傳檔案並獲得返回值

2021-07-10 01:33:14 字數 1475 閱讀 1476

ajax可以進行資料的非同步請求,但對於檔案和跨域問題卻束手無策。

jsonp可以進行跨域資料的非同步請求,但同樣不能使用於檔案。

// 注意,是name="upload",而不是id="upload"後台部分

<?php

move_uploaded_file($_files['upload_file']['tmp_name'],'upload/' . $_files['upload_file']['name']); // 儲存上傳的檔案

echo 'this data is from server!'; // 返回資料,這行字將輸出到iframe的body中

?>

優化結構一:

前端部分(當前網域名稱:a.test.com,與form中的action網域名稱不同)

// 注意,是name="upload",而不是id="upload"
後台部分

<?php

move_uploaded_file($_files['upload_file']['tmp_name'],'upload/' . $_files['upload_file']['name']); // 儲存上傳的檔案

$html = ''

. 'this data is from server!' // 返回資料,這行字將輸出到iframe的body中

. ''; echo $html;

?>

通過上面的優化,iframe從伺服器接收到的內容中就多了一條標籤,這個標籤的src是由 //注意,是name="upload",而不是id="upload"這次我們沒有看到標籤,因為不再需要了,請繼續看後台**:

後台部分

<?php

move_uploaded_file($_files['upload_file']['tmp_name'],'upload/' . $_files['upload_file']['name']); // 儲存上傳的檔案

$data = 'this data is from server!' // 返回資料,這行字將通過url返回給瀏覽器

header('location:' . $_post['tmpurl'] . '?data=' . $_data); // 上傳完成後使iframe直接跳轉至$_post['tmpurl']

?>

與優化結構一不同的是,結構二中不再使用「指定document.domain為一級網域名稱」來解除跨域限制,也不通過iframe的document內容來得到返

回資料,而是通過使iframe直接跳轉至當前網域名稱(通過$_post['tmpurl']指定)來徹底取消跨域限制並且通過url的search部分傳遞返回資料。

兩種結構的對比:

資料:優化結構一的返回資料無大小限制,而優化結構二的返回資料必須小於2k(因為資料是通過rul傳輸的)。

非同步上傳檔案並獲得返回值(完全跨域)

ajax可以進行資料的非同步請求,但對於檔案和跨域問題卻束手無策。jsonp可以進行跨域資料的非同步請求,但同樣不能使用於檔案。注意,是name upload 而不是id upload 後台部分 move uploaded file files upload file tmp name upload...

非同步上傳檔案並獲得返回值(完全跨域)

非同步上傳檔案並獲得返回值 完全跨域 ajax可以進行資料的非同步請求,但對於檔案和跨域問題卻束手無策。jsonp可以進行跨域資料的非同步請求,但同樣不能使用於檔案。upload style display none 注意,是name upload 而不是id upload 後台部分 move up...

ajax非同步跨域上傳檔案,並顯示上傳進度

一般ajax跨域請求 解決方法1 getresponse setheader access control allow origin 允許跨域訪問 解決方法2 ajax response.getwriter write callback callback為ajax自動傳來的 如 jquery1800...