2014-01-24 3 views
0

Я пытаюсь выполнить какое-то асинхронное поведение с Dart и PHP. Вот мой код:Как получить данные POST от Dart на PHP асинхронно?

var data = new FormData(); 
data.append("name", "testing"); 
var httpRequest = new HttpRequest(); 
httpRequest 
    ..open('POST', path) 
    ..setRequestHeader('Content-type', 'application/x-www-form-urlencoded') 
    ..onLoadEnd.listen((e) => requestComplete(httpRequest)) 
    ..send(data); 

path установлен правильно. Поскольку я выполняю asynch, я не хочу, чтобы на самом деле представлял всю форму, поэтому я попытался создать свой собственный объект FormData и добавить информацию, которая мне нужна. Однако, когда я нахожусь в PHP, $_POST['name'] не установлен. Я подумал, что это был заголовок запроса, но я попытался изменить это, и это не помогло. Единственный способ, которым я получил это работать (установить $_POST['name']), - это изменить data на "name=testing". Я попытался просмотром необработанных почтовых данных и это приводит:

------WebKitFormBoundaryUfDGArtA6R3ZWVoj Content-Disposition: form-data; name="name" testing------ 
WebKitFormBoundaryUfDGArtA6R3ZWVoj-- 

Посылает фактическую форму (без асинхронного) дает правильное поведение, однако. Есть ли другой вариант, кроме строки key = value?

+0

Возможный дубликат [XMLHttpRequest Почтовые данные не отправляются] (http://stackoverflow.com/questions/21181113/xmlhttprequest-post-data-not-being-sent) – Musa

+0

Я пробовал этот ответ вчера среди многих других и ничего работал ... Сегодня я снова вынимаю строку заголовка запроса, и теперь он работает ... Интересно, почему это не сработало, когда я задал тип контента multipart/form-data. Ну что ж. Спасибо, что заставил меня повторить это. – Lathan

+0

Проблема будет границей, если вы установите ее в заголовке типа контента, она должна соответствовать той, которая была создана браузером. – Musa

ответ

0

Причина, по которой это не сработало, - это когда вы переопределяете заголовок Content-Type, вы также переопределяете его граничный параметр. При публикации multipart/form-data ему нужна дополнительная информация, называемая границей, которая позволяет ему узнать, для чего нужно разделить данные. В этом случае граница должна быть: ---- WebKitFormBoundaryUfDGArtA6R3ZWVoj

Я думаю, что это позаботится о вас, если вы не укажете тип контента. Полный тип content = был бы похож на «multipart/form-data»; border = ---- WebKitFormBoundaryUfDGArtA6R3ZWVoj ', когда все это сказано и сделано, и должно соответствовать содержимому ваших данных формы после сборки.

Я думаю, что FormData позаботится об этом для вас или, по крайней мере, позволит вам вытащить его и установить самостоятельно.

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