Может ли кто-нибудь сказать мне, почему следующее утверждение не отправляет данные сообщения на указанный URL-адрес? URL вызывается, но на сервере, когда я печатаю $ _POST - я получаю пустой массив. Если я распечатываю сообщение в консоли, прежде чем добавить его к данным - оно показывает правильное содержание.
$http.post('request-url', { 'message' : message });
Я также пробовал это с данными в виде строки (с тем же результатом):
$http.post('request-url', "message=" + message);
Кажется, это работает, когда я использую его в следующем формате:
$http({
method: 'POST',
url: 'request-url',
data: "message=" + message,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
но есть ли способ сделать это с помощью $ http.post () - и мне всегда нужно включать заголовок, чтобы он работал? Я считаю, что вышеуказанный тип содержимого указывает формат отправляемых данных, но могу ли я отправить его как объект javascript?
angularjs
post
angular-http
Спенсер Марк
источник
источник
Ответы:
У меня была такая же проблема при использовании asp.net MVC и я нашел решение здесь
Работает как шарм.
КОД
источник
bower install angular-post-fix --save-dev
чтобы добавить его.Это не супер ясно выше, но если вы получаете запрос в PHP, вы можете использовать:
$params = json_decode(file_get_contents('php://input'),true);
Чтобы получить доступ к массиву в PHP из AngularJS POST.
источник
json_decode(file_get_contents('php://input'), true);
Вы можете установить «Content-Type» по умолчанию следующим образом:
О
data
формате:Попробуйте использовать этот вариант
источник
У меня была похожая проблема, и мне интересно, может ли это быть полезным: https://stackoverflow.com/a/11443066
С Уважением,
источник
Мне нравится использовать функцию для преобразования объектов в пост-параметры.
источник
Наконец, это было решено в Angular 1.4 с использованием $ httpParamSerializerJQLike
См. Https://github.com/angular/angular.js/issues/6039.
источник
Я использую JQuery Param с AngularJS после запроса. Вот пример ... создайте модуль приложения AngularJS, где
myapp
определенng-app
в вашем HTML-коде.Теперь давайте создадим контроллер входа в систему и POST электронную почту и пароль.
Я не люблю объяснять код, он достаточно прост для понимания :) Обратите внимание, что
param
это из jQuery, поэтому вы должны установить как jQuery, так и AngularJS, чтобы он работал. Вот скриншот.Надеюсь, это полезно. Спасибо!
источник
У меня была такая же проблема с AngularJS и Node.js + Express 4 + Router
Маршрутизатор ожидает данные от почтового запроса в теле. Это тело всегда было пустым, если я следовал примеру из Angular Docs
Запись 1
Но если бы я использовал его в данных
Запись 2
Изменить 1:
В противном случае маршрутизатор node.js будет ожидать данные в req.body, если используется нотация 1:
Который также отправляет информацию в виде полезной нагрузки JSON. Это лучше в некоторых случаях, когда у вас есть массивы в вашем json, и x-www-form-urlencoded вызовет некоторые проблемы.
это сработало. Надеюсь, поможет.
источник
В отличие от JQuery и ради педантичности, Angular использует формат JSON для передачи данных POST от клиента к серверу (JQuery применяет предположительно x-www-form-urlencoded, хотя JQuery и Angular используют JSON для ввода данных). Поэтому есть две части проблемы: в клиентской части js и в вашей серверной части. Итак, вам нужно:
поставь js угловую клиентскую часть вот так:
И
напишите в вашей серверной части, чтобы получить данные от клиента (если это php).
Примечание: $ _POST не будет работать!
Решение работает хорошо для меня, надеюсь, и для вас.
источник
Для отправки данных с помощью метода Post с
$http
Angularjs необходимо изменитьdata: "message=" + message
, с участиемdata: $.param({message:message})
источник
Чтобы построить ответ @ felipe-miosso:
Добавьте его в свое приложение:
источник
У меня нет репутации, чтобы комментировать, но в ответ / дополнение к ответу Дона Ф.:
$params = json_decode(file_get_contents('php://input'));
Второй параметр
true
должен быть добавлен вjson_decode
функцию для правильного возврата ассоциативного массива:$params = json_decode(file_get_contents('php://input'), true);
источник
угловатый
WebAPI 2
источник
Этот код решил проблему для меня. Это решение на уровне приложений:
источник
Добавьте это в свой файл js:
и добавьте это в файл вашего сервера:
Это должно работать.
источник
Я также столкнулся с подобной проблемой, и я делал что-то подобное, и это не сработало. Мой контроллер Spring не смог прочитать данные параметра.
Но, читая этот форум и API Doc, я попробовал следующий путь, и это сработало для меня. Если у кого-то также есть подобная проблема, Вы можете попробовать и ниже путь.
Пожалуйста, проверьте https://docs.angularjs.org/api/ng/service/ $ http # post, чтобы узнать, что делает config config. {data: '"id": "1"'} - Карта строк или объектов, которые будут преобразованы в URL? data = "id: 1"
источник
это, вероятно, поздний ответ, но я думаю, что самый правильный способ - использовать тот же фрагмент кода, который используется при выполнении запроса «get», используя его, вам
$httpParamSerializer
придется внедрить его в свой контроллер, чтобы вы могли просто сделать следующее без необходимости использовать Jquery вообще,$http.post(url,$httpParamSerializer({param:val}))
источник
В моем случае я решаю проблему следующим образом:
Вам необходимо использовать JSON.stringify для каждого параметра, содержащего объект JSON, а затем создать свой объект данных с помощью "$ .param" :-)
NB. Мой «objJSON» - это объект JSON, содержащий массив, целое число, строку и HTML-контент. Его общий размер> 3500 символов.
источник
Я знаю, что принял ответ. Но последующие могут помочь будущим читателям, если ответ не подходит им по какой-либо причине.
Angular не делает ajax так же, как jQuery. Пока я пытался следовать руководству по изменению угла
$httpprovider
, я столкнулся с другими проблемами. Например, я использую codeigniter, в котором$this->input->is_ajax_request()
функция всегда неудачу (которая была написана другим программистом и использовалась глобально, поэтому не может быть изменена), говоря, что это не настоящий запрос ajax.Чтобы решить это, я воспользовался помощью отсроченным обещанием . Я тестировал его в Firefox, и ie9, и он работал.
У меня есть следующая функция, определенная вне любого углового кода. Эта функция делает регулярный вызов jquery ajax и возвращает объект отложенного / обещания (я все еще учусь).
Затем я называю это угловым кодом, используя следующий код. Обратите внимание, что мы должны обновить
$scope
вручную с помощью$scope.$apply()
.Возможно, это не идеальный ответ, но он позволил мне использовать вызовы jquery ajax с angular и позволил мне обновить
$scope
.источник
У меня была такая же проблема в экспрессе .. чтобы решить, вы должны использовать bodyparser для анализа объектов json перед отправкой http запросов ..
источник
Надеюсь, поможет.
источник
Не удалось найти полный фрагмент кода о том, как использовать метод $ http.post для отправки данных на сервер и почему он не работает в этом случае.
Пояснения к фрагменту кода ниже ...
Установка Content-Type в переменной config, которая будет передана вместе с запросом angularJS $ http.post, который указывает серверу, что мы отправляем данные в формате www post.
Обратите внимание на метод $ htttp.post, где я отправляю 1-й параметр в виде URL-адреса, 2-й параметр в качестве данных (сериализованный) и 3-й параметр в качестве конфигурации.
Оставшийся код понятен самому себе.
Посмотрите на пример кода метода $ http.post здесь .
источник
Если вы используете PHP, это простой способ получить доступ к массиву в PHP из AngularJS POST.
источник
Если используется Angular> = 1.4 , вот самое чистое решение с использованием сериализатора, предоставленного Angular :
И тогда вы можете просто сделать это в любом месте вашего приложения:
И он будет правильно сериализовать данные как
param1=value1¶m2=value2
и отправит их/requesturl
сapplication/x-www-form-urlencoded; charset=utf-8
заголовком Content-Type, как это обычно ожидается с запросами POST на конечных точках.TL; DR
Во время моего исследования я обнаружил, что ответ на эту проблему может быть разным; некоторые из них очень сложны и зависят от пользовательских функций, некоторые зависят от jQuery, а некоторые неполны, предлагая установить заголовок.
Если вы просто установите
Content-Type
заголовок, конечная точка увидит данные POST, но они не будут в стандартном формате, потому что если вы не предоставите строку в качестве вашейdata
или не сериализуете вручную ваш объект данных, все они будут сериализованы как JSON по умолчанию и может быть неправильно интерпретирован в конечной точке.например, если в вышеприведенном примере не был задан правильный сериализатор, он будет выглядеть в конечной точке как:
И это может привести к неожиданному синтаксическому анализу, например, ASP.NET рассматривает его как
null
имя параметра{"param1":"value1","param2":"value2"}
и значение as; или Fiddler интерпретирует его по-другому, используя его{"param1":"value1","param2":"value2"}
как имя параметра иnull
как значение.источник
Аналогично предложенному рабочему формату OP и ответу Денисона, за исключением того, что он используется
$http.post
вместо just$http
и все еще зависит от jQuery.Преимущество использования jQuery в том, что сложные объекты передаются правильно; против ручного преобразования в параметры URL, которые могут искажать данные.
источник
Когда у меня возникла эта проблема, параметр, который я публиковал, оказался массивом объектов, а не простым объектом.
источник
Только что обновил с угловой 1.2 до 1.3, обнаружил проблему в коде. Преобразование ресурса приведет к бесконечному циклу, потому что (я думаю) $ обещание снова содержит тот же объект. Может быть, это кому-то поможет ...
Я мог бы это исправить:
источник
Я уже давно использую принятый код ответа (код Фелипе), и он отлично работает (спасибо, Фелипе!).
Однако недавно я обнаружил, что у него есть проблемы с пустыми объектами или массивами. Например, при отправке этого объекта:
PHP, кажется, не видит B и C вообще. Это получает это:
Посмотрите на фактический запрос в Chrome показывает это:
Я написал альтернативный фрагмент кода. Кажется, это хорошо работает с моими вариантами использования, но я не тестировал это широко, поэтому используйте с осторожностью.
Я использовал TypeScript, потому что мне нравится строгая типизация, но было бы легко преобразовать его в чистый JS:
Он менее эффективен, чем код Фелипе, но я не думаю, что это имеет большое значение, поскольку он должен быть немедленным по сравнению с общими издержками самого HTTP-запроса.
Теперь PHP показывает:
Насколько я знаю, PHP не может распознать, что Ba и C - пустые массивы, но, по крайней мере, появляются ключи, что важно, когда есть код, который опирается на определенную структуру, даже если он по существу пуст внутри.
Также обратите внимание, что он преобразует неопределенные s и нулевые s в пустые строки.
источник
Просто поместите данные, которые вы хотите отправить, как второй параметр:
Другая форма, которая также работает:
Убедитесь, что оно
paramName
точно соответствует названию параметра функции, которую вы вызываете.Источник: AngularJS пост ярлык метод
источник
Я решил это с помощью следующих кодов:
Сторона клиента (Js):
обратите внимание, что данные являются объектом.
На сервере (ASP.NET MVC):
и 'AllowCrossSiteJsonAttribute' необходим для междоменных запросов:
Надеюсь, это было полезно.
источник