2012-04-21 3 views
2

Я хочу загружать файлы асинхронно, когда пользователь выбирает файл во входном файле с $ .ajax. Но php, который возвращает индекс возврата вызова, не определен. код JQuery является следующим:

$("#urlimatge").change(function(){ 
      var filename = $("#urlimatge").val(); 
      $.ajax({ 
       type: "POST", 
       url: "utils/uploadtempimg.php", 
       enctype: 'multipart/form-data', 
       data: {'urlimatge' : filename }, 
       success: function(response){ 
        alert(response); 
       } 
      }); 

     }); 

и PHP, что recibe вызов:

$image = new gestorimatges(); 
$target_path = $image->uploadTemp($_FILES['urlimatge']['name'],$_FILES['urlimatge']['tmp_name']); 

Благодаря

ответ

1

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

Многие люди идут в плагины, но вы можете сделать это сами довольно легко и со всеми функциями запроса AJAX.

Вместо использования функции AJAX, есть форма представить скрытый iframe, который имеет обработчик load событий прилагаются к нему так, когда форма была отправлена, у вас есть функция обратного вызова, которая на самом деле включает в себя ответ сервера (HTML из iframe после его загрузки).

Пример:

HTML -

<form action="..." method="post" encrypt="application/x-www-form-urlencoded" target="workFrame" > 
    <input type="file" name="file" /> 
    <input type="submit" /> 
</form> 
<iframe id="workFrame" src="about:blank" style="display:none;"></iframe> 

JS -

$(function() { 
    $('form').on('submit', function() { 
     //check if the form submission is valid, if so just let it submit 
     //otherwise you could call `return false;` to stop the submission 
    }); 

    $('#workFrame').on('load', function() { 

     //get the response from the server 
     var response = $(this).contents().find('body').html(); 

     //you can now access the server response in the `response` variable 
     //this is the same as the success callback for a jQuery AJAX request 
    }); 
}); 
+0

спасибо, что я использовал аналогичное решение с iframe. Я вызываю iframe и изменяю значение действия с помощью jquery. –

+0

следующее не работает для меня: я использую загрузчик файлов mulit для выбора нескольких файлов. файлы отправляются только через форму. Теперь он открывает новую «вкладку» в моем браузере firefox .... \t

\t \t \t \t <входной тип = "отправить" значение = "Загрузить" /> \t
rajeev

+0

___Javascript является: ____ <тип скрипта = "текст/JavaScript"> $ (документ) .ready (функция() { \t $ ("# iworkFrame"). On ('load', function() { \t var response = $ (this) .contents(). Find ('body'). Html(); \t \t alert ("загружено следующее: \ n" + ответ); }); }); ____объектив ______. Другая проблема, предупреждение появляется при загрузке страницы. я думал, что это будет отображаться только при ответе на подачу формы .... 2. Я пытаюсь не открывать новое окно или вкладку при загрузке файла .... – rajeev

2

Вы могли бы хотеть использовать инструменты, как uploadify для этого.

+0

вспышки ... не только нет причин, чтобы заставить людей поддерживать Flash, чтобы использовать форму, которая, как Uploadify работы , – Jasper

+0

Есть много других инструментов, которые не используют флэшку .. проверьте это .. http://superdit.com/2010/06/29/10-jquery-ajax-file-uploader-plugins/ – Broncha

3

вы не можете передать $ _FILE из AJAX в PHP.

Я хотел бы предложить использовать plugin

Это сделает вашу жизнь проще :) Here is a video tutorial to help too

+0

ok спасибо, могу ли я пройти достаточно параметры для загрузки файла, например, имя или URL-адрес? Я попробую добавить плагин. –

+0

Да, вы можете передать дополнительные параметры и все, просто добавьте в params: {ничего: 'youwant'} – JREAM

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