mark2011

Рейтинг
341
Регистрация
11.01.2011

RedOK,

Ну да, я типа обкурился и не подключил файл...

RedOK:
с чего такая уверенность, что файл с функцией грузится раньше?

ну я потому что не разработчик страницы, откуда мне знать что там когда грузится...


function addProduct()
{
if (confirm('Добавить продукт?'))
{
$.ajax({
url:'ajax.php?mode=add_product',
data: $('#addProduct').serialize(),
type: 'POST',
dataType: 'json',
success: function(data)
{
if (data.result)
{
if (confirm('Продукт успешно добавлен. Добавить ещё один?'))
{
resetForm('addProduct');
$('#productName').focus();
}
else
{
$('#message-success').removeClass('hidden');
}
}
else
{
if (data.need_redirection)
{
if (confirm(data.error))
{
window.location.pathname = data.redirect_url;
}
}
else
{
alert(data.error);
}

}
}
})
}
}

Файл с функцией грузится раньше формы. И функция реально существует!

hosting_manager,

Скажу в защиту.

Хостер при чём всегда. Может знаете такое выражение - клиент всегда прав! А почему мы должны платить дополнительные деньги, искать хост у другого провайдера, ещё не факт, что там будет хорошо... а в это время ТП данного хостинга тупо забивает на клиентов. Не западный подход, однозначно...

Это не клиент должен бегать искать хосты. Если уж на то пошло, когда автобус сходит с линии, то что происходит? Водитель останавливается, договаривается с проезжающим автобусом чтобы тот подобрал пассажиров, и все пассажиры организованно идут в новый автобус. Он же не заставляет пассажиров искать новый вид транспорта. А почему здесь так? Вот хостер бы и нашёл другого провайдера, договорился бы с ним о специальной цене для его клиентов и всё, вопросов бы не было. Или на крайний случай, вернул бы всем деньги за период даунтайма и всё, опять все в расчёте.

В общем, накодил вот что:

Это вот функции, которые успешно работают на одном сайте:


function file_send() {
sendForm("send", "/admin/includes/copyfile.php", callback);
return false;
}

function photo_send() {
sendForm("addProduct", "includes/load_photo.php", callbackPhoto);
return false;
}
function sendForm(form, url, callfunc) {
if (!document.createElement) return;
if (typeof(form)=="string") form=document.getElementById(form);
var frame=createIFrame();
var act = form.getAttribute('action');
frame.onSendComplete = function() {callfunc(form,act,getIFrameXML(frame));};
form.setAttribute('target', frame.id);
form.setAttribute('action', url);
form.submit();
}

function createIFrame() {
var id = 'frameID';
var div = document.createElement('div');
div.innerHTML = "<iframe style=\"display:none;\" src=\"about:blank\" id=\""+id+"\" name=\""+id+"\" onload=\"sendComplete('"+id+"')\"></iframe>";
document.body.appendChild(div);
return document.getElementById(id);
}

function sendComplete(id) {
var iframe=document.getElementById(id);
if (iframe.onSendComplete &&
typeof(iframe.onSendComplete) == 'function') iframe.onSendComplete();
}

function getIFrameXML(iframe) {
var doc=iframe.contentDocument;
if (!doc && iframe.contentWindow) doc=iframe.contentWindow.document;
if (!doc) doc=window.frames[iframe.id].document;
if (!doc) return null;
if (doc.location=="about:blank") return null;
if (doc.XMLDocument) doc=doc.XMLDocument;
return doc;
}

function callback(form,act,doc) {
form.setAttribute('action', act);
form.removeAttribute('target');
alert(doc.body.innerHTML);
}

function callbackPhoto(form,act,doc)
{
form.setAttribute('action', act);
form.removeAttribute('target');

//$('results').set('html', doc.body.innerHTML);
//location.reload();
}

далее сделал так:

(фрагмент кода)


<iframe name="upload_target" style="width:0;height:0;"></iframe>
<div class="formcontent">
<form id="addProduct" name="addProduct" class="form-horizontal" target="upload_target">

Но остаются неясными два вопроса:

1. Откуда берётся файл load_photo.php? От какого корня считается этот путь?

2. Создал 2 файла load_photo.php в разных папках (авось какой-нибудь сработает!). с одинаковым содержанием:


print_r($_FILES);

с надеждой увидеть весь массив...

Форма просто даже не отрабатывает, а непонятно что делает... мне даже не удаётся по Firebug отследить, на какие файлы идёт запрос (если вообще куда-то идёт).

---------- Добавлено 25.01.2013 в 14:11 ----------

Не пойму, в чём я не догоняю....

Все те функции, указанные в этом посте - работают.

На форме установлен enctype=multipart/form-data

Файл-обработчик php вызывается! проверено...

При попытке вывести содержимое ответа (массив $_FILES) выводится просто пустой массив...

На всякий случай дублирую:


<iframe name="upload_target" style="width:0;height:0;"></iframe>
<div class="formcontent">
<form id="addProduct" name="addProduct" class="form-horizontal" target="upload_target" enctype="multipart/form-data">

Callback-функция


function callbackPhoto(form,act,doc)
{
form.setAttribute('action', act);
form.removeAttribute('target');
$('#result').html(doc.body.innerHTML);
//$('results').set('html', doc.body.innerHTML);
//location.reload();
}

php:


print_r($_FILES);

на выходе ТУПО пустой массив...

При том, что файлы ajax-запросом физически отправиться не могут!

если это не так, пример кода, иллюстрирующего ваши слова - в студию!

Милованов Ю.С:
А с загрузкой фоток можно поступить просто: после вставки в базу этих семи полей вызываем mysql_insert_id() и возврящаем его. Как тока мы получили АйДи этот - делаем его <input type="hidden" value="_stavim_zna4enie_4erez_jquery"> и будет красота.

А что красота? По-вашему у меня форма не через iframe будет отправляться? Если так, то отправятся все поля, не только фото. Если нет, то как вы вообще видите отправку фото?

В чём "красота" я так и не понял)


<form method="post" target="iframeID" enctype="multipart/form-data">

так что ли? но тогда ВСЯ форма будет слаться в iframeID.

Ну я же не могу прочитать массив $_FILES аяксом )))) про iframe понятно, но будет ли это кроссбраузерно? И потом я читал про ифрейм, мне-то нужно чтобы всё скопом отправилось, а не по одному файлику.

Спасибо, всё работает )

Всего: 2104