2016-08-25 2 views
27

У меня простая контактная форма для скачивания файла excel. Главная проблема происходит, когда .I Аякса нагрузки, чтобы загрузить Excel файл затем перенаправить пользователя на следующей странице .. Ниже мой код с фиктивными данными ..Загрузите файл и перенаправьте его на другую страницу через ajax

Ajax код ..

$.ajax({ 
    type: "POST", 
    url: "/site/ajaxexcel.php", 
    data: {'value':'send'}, 
    cache: false, 
    success: function(html){ 
     location.href = '<?php echo base_url()."/site/welcome.php" ?>';     
    } 
}); 

И мой ajaxexcel.php код:

<?php 
$content= '<html xmlns:x="urn:schemas-microsoft-com:office:excel"> 
<head> 
    <!--[if gte mso 9]> 
    <xml> 
     <x:ExcelWorkbook> 
      <x:ExcelWorksheets> 
       <x:ExcelWorksheet> 
        <x:Name>Sheet 1</x:Name> 
        <x:WorksheetOptions> 
         <x:Print> 
          <x:ValidPrinterInfo/> 
         </x:Print> 
        </x:WorksheetOptions> 
       </x:ExcelWorksheet> 
      </x:ExcelWorksheets> 
     </x:ExcelWorkbook> 
    </xml> 
    <![endif]--> 
</head> 

<body><table class="table table-condensed table-striped table-hover table-bordered pull-left" id="myTable"><thead><tr><th>Rakesh</th><th>kumar</th></tr></thead><tbody><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr></tbody></table></body></html>'; 
header('Content-type: application/excel'); 
header('Content-type: image/jpeg,image/gif,image/png'); 
header("Content-Disposition: attachment; filename=download.xls"); 
header("Pragma: "); 
header("Cache-Control: "); 
echo $content; 
?> 

Я хочу просто загрузить файл excel, а затем перенаправить пользователя в определенное место.

Также вы можете мне помочь с кодом CodeIgniter, если вы сделали это правильно ..

+0

Я думаю, что эта ссылка http: // stackoverflow.com/questions/4545311/download-a-file-by-jquery-ajax поможет вам – shafiq

+0

Благодарим за комментарий. Фактически, таким образом они говорят: используйте внешний файл js. Но мой код ajax прост и установлен. Поэтому, пожалуйста, помогите мне в моем коде. @ User1048123_SOreadytohelp –

+0

@KumarRakesh Можете ли вы добавить свою папку проекта, где мы можем скачать. Cz мне нужно больше информации, чтобы помочь вам –

ответ

2

вы можете использовать jquery.fileDownload.js для этого. вы можете найти здесь пример. , , http://www.codeasearch.com/working-with-jquery-filedownload-js-plugin.html

+0

Их нет полного описания. И я использовал их код, но не получаю конкретного результата. Пожалуйста, дайте мне письменный код. А также я хочу перенаправить пользователя на другую страницу @Ravikiran kalal. –

4

Я думаю, что это очень сложно загрузить. Используйте PHP Excel для создания файла и загрузки.

+0

О, я .. Звук Хорошо .. Спасибо, я уже попробовал. Но главная проблема - перенаправление. Действие заголовка не работает после кода загрузки. –

+0

Используйте это в PhpExcel $ name = "file.xlsx"; $ objWriter-> save ('FolderName /'.$ name); $ path = "FolderName/file.xlsx"; header ("Location: $ path"); –

+0

У меня есть ваше мнение. Его не работает отлично для меня .. И также я хочу сделать это с ajax @vijju Pundir –

2

Фактически для этой ситуации я рекомендую открывать местоположение файла с пустым параметром и перенаправлять. Для этого вам нужно создать форму структуры и представить его на action.php

Пример:

var form = document.createElement("form"); 
form.setAttribute("method", "post"); 
form.setAttribute("action", "action.php"); 
form.setAttribute("target", "myView"); 
// or you can use _blank : form.setAttribute("target", "_blank"); 

var hiddenField = document.createElement("input"); 
hiddenField.setAttribute("type", "hidden"); 
hiddenField.setAttribute("name", "message"); 
hiddenField.setAttribute("value", "val"); 
form.appendChild(hiddenField); 
document.body.appendChild(form); 
window.open('', 'myView'); 
form.submit(); 
alert("Redirect in 10 second!"); 
setTimeout(function(){ 
    location.href = "/home" 
}, 10000); 
+0

setTimeout не является перформативным способом. Я думаю, 10 секунд, меньше или больше, это не правильный путь. Дорогой. –

5

Try ниже метод, надеюсь, он будет работать

  1. открытый ajaxexcel.php в новом окне с помощью window.open
  2. он начнет загрузку, затем закройте его.
  3. Как только он закрывается, перенаправляет страницу.
+0

Спасибо за ответ @ shaymmakwana.me .. Но его недостаточно и правильный ответ для меня. Как будто вы можете видеть мой код .. Их уже используется заголовок для файла загрузки. Поэтому нельзя использовать заголовок: код местоположения в этом файле. –

+0

Я думаю, что вы неправильно поняли, вам нужно написать код перенаправления в своем родительском окне (а не в ajaxexcel.php), откуда вы открываете 'ajaxexcel.php'. Я предлагаю попробовать, а потом вернуться. –

+0

Хорошо, позвольте мне еще раз проверить. Большое спасибо за быстрый ответ. –

4

Вы не можете скачать файл с помощью Ajax-запроса. Любые способы перенаправления в определенное место, которые позволят вам загрузить файл. Возможно, вы попытались с этим, но попробуйте загрузить файл на отдельной вкладке и перенаправите страницу на определенную страницу.

<input id="btnGetResponse" type="button" value="Redirect" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    $("#btnGetResponse").click(function() { 
     window.open('/test/excel.php'); 
     window.location = "http://stackoverflow.com/"; 
    }); 
}); 
</script> 

Также из вашего файла PHP (excel.php) удалите эту строку. В противном случае она будет скачать файл в формате JPG или PNG

header('Content-type: image/jpeg,image/gif,image/png'); 
+0

Я не могу получить свой ответ. Это дает мне решение. Как мое требование, это не безупречно для меня –

4

С помощью https://github.com/johnculviner/jquery.fileDownload ЯШ:

$.ajax({ 
    type: "POST", 
    url: "/site/ajaxexcel.php", 
    data: {'value':'send'}, 
    cache: false, 
    success: function(html) 
     { 
      $.fileDownload("ajaxheader.php", 
      { 
       successCallback: function (url) { 
        location.href = '<?php echo base_url()."/site/welcome.php" ?>';  
       }, 
       failCallback: function (responseHtml, url) { 
        alert('error'); 
       } 
      });  
     } 
}); 

И в стороне PHP добавить ниже строки в заголовках:

header("Set-Cookie: fileDownload=true; path=/"); 
+0

Спасибо большое за ответы .. Я получил ваш ответ .. В этом случае мой файл не загружен только с местонахождением href working –

+0

Он работает для меня. Что не работает для вас? – Ish

2

С помощью https://github.com/johnculviner/jquery.fileDownload

Также из вашего файла PHP (excel.php) удалите эту строку. В противном случае он загрузит ваш файл как JPG или PNG

header ('Тип контента: image/jpeg, image/gif, image/png');

+0

Как и ответ Иш. можете ли вы написать свой полный код для меня. –

2

Вы можете достичь этого, создав виртуальную форму и разместите ее.

function autoGenerateAndSubmitForm(method, url, post_data) { 
    var element = document.getElementById("virtual_form"); 
    if(element != null) 
    { 
     element.parentNode.removeChild(element); 
    } 
    var form = document.createElement("form"); 
    form.setAttribute("id", "virtual_form"); 
    form.setAttribute("style", "display:none;"); 
    form.setAttribute("target", "_blank"); // This line is very important in your case for redirect in other page and download your file. 
    form.method = method; 
    form.action = url; 
    for(i in post_data) 
    { 
     var element=document.createElement("input"); 
     element.value=post_data[i]; 
     element.name=i; 
     form.appendChild(element); 
    } 
    document.body.appendChild(form); 
    form.submit(); 
    form.parentNode.removeChild(form); 
} 

Вызов выше метод, где вам это нужно, я предполагаю, что uyou есть называть его в случае щелчка

$('button').on('click', function(e){ 
    autoGenerateAndSubmitForm("POST","/site/ajaxexcel.php",{'value':'send'}); 
    location.href = '<?php echo base_url()."/site/welcome.php" ?>';  
}); 

Удалить ниже линии с вашей стороны сервера кода.

header('Content-type: image/jpeg,image/gif,image/png'); 
+0

Спасибо за ответ. Я использую ваш код. Но в консоли есть много ошибок, таких как блочные URL-адреса и т. Д. –

+0

Это работает на меня ... Странно, что не работает для вас .... и wht блокирует URL-адрес? вы используете SSL-сертификат? –

2

В Ajax .... Просто вы можете создать файл первенствовать на сервере ... Аякса ответ будет путь к файлу Excel ... На АЯКС успеха открыть файл первенствовать в новой вкладке (она автоматически загружает Excel) и в то же время открывает новую вкладку с новым местоположением.

пример кода внутри Ajax успеха приведены ниже

window.open("path to excel.."); 
    window.open("new location"); 

также можно использовать (при необходимости)

window.location.replace("new location"); 

Open multiple links in Chrome at once as new tabs

+0

Не работает дорогой. –

2

Метод 1: с JQuery AJAX

Заменитьваш Аякс со следующим кодом ..

<script> 
$.ajax({ 
    type: "POST", 
    url: "/site/ajaxexcel.php", 
    data: {'value':'send'}, 
    cache: false, 
    success: function(html) 
    { 
     window.open("/site/ajaxexcel.php"); 
     location.href = '<?php echo base_url()."/site/welcome.php" ?>';     
    } 
}); 
</script> 

window.open откроет ajaxexcel.php файл в отдельном окне и location.href будет перенаправлять на данный welcome.php file.This это лучший способ для этого.

Метод 2: с JQuery FileDownload плагин

Просто включите jqueryfiledownload script и сделать что-то вроде этого:

<a class="download" href="/path/to/file">Download</a> 
<script> 
$(document).on("click", "a.download", function() { 
      $.fileDownload($(this).prop('href')) 
       .done(function() { alert('File download a success!'); //success code}) 
       .fail(function() { alert('File download failed!');//failure code }); 

      return false; //this is critical to stop the click event which will trigger a normal file download 
     }); 
</script> 

Теперь, когда вы нажимаете на якорь файл загружается, и вы можете написать свой успех/failure в done()/fail() функций соответственно.

+0

Как и Милан Малани ответ, я уже пробовал с таким кодом .. Но главная проблема - скачать файл в новом окне –

+0

hii @KumarRakesh, я согласен, что загрузка файла откроется в новом окне, но новое окно будет автоматически закрывается, и диалог загрузки сразу появляется, и вы будете перенаправлены на другую страницу. –

+0

Еще одна вещь Дорогой, ее не работает в Chrome и Safari. –

1

Просто используйте простой JavaScript

window.location.replace(###file url###); 
1

1) Ajax не является решением проблемы.

2) window.open() всплывающее окно будет заблокирован в большинстве браузеров, даже с той же области (по крайней мере, что происходит в хроме и FF некоторое время назад, когда я пытался реализовать что-то подобное)

Что-то, как это будет делать то работа: (Это не проверяет такие вещи, как код возвращается, так 404 или нерыночной файл будет вызывать перенаправление без загрузки)

document.getElementById('zzz').onclick = function() { 
 
    ifrm = document.createElement('iframe'); 
 
    ifrm.style.display = "none"; 
 

 
    ifrm.src = "https://github.com/SheetJS/test_files/blob/b07031a7bd5a8b86b9baac94267f20cf81c6d5eb/A4X_2013.xls?raw=true"; 
 
// some random xls file from github (it contains just a single "x" character in cell A-4) 
 
    
 
    ifrm.onload = function() { 
 
    window.location.href = "https://jquery.com"; 
 
    }; 
 
    
 
    document.body.appendChild(ifrm); 
 
    return false; 
 
}
<a href="#" id="zzz"> 
 
click me 
 
</a>

P.S .: Вам понадобится заголовок application/octet-streamContent-type для некоторых типов файлов (например, pdf), чтобы заставить браузер загружать файл, а не использовать встроенные средства просмотра.

Смежные вопросы