2012-05-28 3 views
2

я следующий код клиента, чтобы загрузить изображение с телефонаPhoneGap, JQuery Ajax пост не работает

$("#placeorder").click(
function() { 
    if ($('#placeorderform').valid()) { 
    var formData = $('#placeorderform').serialize(); 
    formData += "&uploaded="+ imgData; 
    $.ajax({ 
    type : "POST", 
    url : _host+ "/addorder.php", 
    data : formData, 
    dataType : 'jsonp', 
    success : onSuccess, 
    error : onError 
    }); 
    } 
}); 

Server Side PHP (не работает)

$encodedData = str_replace(' ','+',$_POST['uploaded']); 

на стороне сервера PHP ($ _REQUEST или $ _GET но для небольших изображений)

$encodedData = str_replace(' ','+',$_REQUEST['uploaded']); 

В чем проблема с кодом моего клиента.

Дополнительные замечания:

Я попытался проверить заголовок запроса и обнаружил удивительный результат. Когда я делаю над ajax в браузере, данные принимаются в POST. Но изнутри Phonegap даже после явного упоминания типа: «POST» данные получены в GET.

Может кто-то положил некоторый свет на эти поведения :(Что-то не так с моей конфигурации PhoneGap?

+0

Если он работает только для «малых изображения ", то ваш код на стороне клиента - это похоже на то, что ограничение на размер файла накладывается на ваш пост. –

+0

Спасибо. Но сообщение не срабатывает для одних и тех же изображений; который работает, когда используется тип запроса или запроса. –

ответ

3

Так что я получил эту работу ... Удивительная находка !!!

когда я меняю dataType: 'jsonp' to ('json' или 'text') formdata проходит через $ _POST.

Только когда DATATYPE: «JSONP» данные форма для некоторых причин неизвестных проходит через $ _GET или $ _REQUEST

Не знаю, почему это должно случаться; Но на данный момент моя проблема решена с помощью json.

1

Насколько я знаю serialising форму не включает в себя файлы. Если вы используете PhoneGap, почему бы вам не использовать File API они обеспечивают, который позволяет загружать файлы?

для того, чтобы отправить переменные формы вместе с файлом, просто добавьте массив Params с параметрами

var options = new FileUploadOptions(); 
options.fileKey="file"; 
options.fileName=fileURI.substr(fileURI.lastIndexOf('/')+1); 
options.mimeType="text/plain"; 

var params = new Object(); 
params.value1 = "test"; 
params.value2 = "param"; 

options.params = params; 
var ft = new FileTransfer(); 
ft.upload(fileURI, "http://some.server.com/upload.php", win, fail, options); 
+0

Наряду с файлом, который нужно загрузить, мне нужно отправить данные формы в один файл php. Могу ли я отправлять серийные данные формы вместе с файлом для загрузки с использованием API FileTransfer в Phonegap? –

+0

Я пробовал это, но все еще не работал. Кажется, проблема связана с моей конфигурацией проекта Andriod. ft.upload(), $ .post() и $ .get(), ни один из них не вызывает вызов сервера, и их соответствующий успех и вызовы функции обратного вызова вызова вызываются. Только $ .ajax() работает, но данные получены в $ _GET not $ _POST –

+0

Похоже, что это может быть проблемой с вашим PHP-кодом. Вы проверили сообщение формы через простую форму HTML? – codemonkey

0

Невозможно отправить запрос POST, ожидая ответа JSONP. Поскольку JSONP просто получают запросы, в которые встроены скрипты, возвращаемые в ваш dom.

Это как Ajax звонки работают в JQuery, и это также explains-- «даже после того, как явного упоминания типа:„POST“данные, полученные в GET»

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