не получается отправить JSON данные
доделал скрипт калькулятора и теперь не могу отправить данные из него рнр скрипту
$scope.submit = function(isValid) { if (isValid) { $http.post($scope.url, {"name": $scope.name, "email": $scope.email, "message": $scope.message }). success(function(data, status) { console.log(data); $scope.status = status; $scope.data = data; $scope.result = data; }) }else{ alert('Form is not valid'); } } при нажатии на кнопку submit браузер отображает вот это - как будто я посылаю пустую посылку Код:
ParameterBag {#211 ▼ |
А ты уверен что $scope.name /email/message не пустые? Не вижу других причин.
Кроме того на бэкэнде могут быть проблемы с парсингом запроса, т.к. по дефолту бэк настроен на получение данных в формате querystring. Angular шлет в формате json |
не должны быть пустыми, хотя бы потому что они required и без них форма не отправляется
вот еще выдержки из кода <form method="POST" action="page.html" class="calc" name="calculator" ng-app="Calc" ng-controller="CalcController"> <input id="name" name="name" ng-model="name" type="text" required> <label for="name">Ваше имя *</label> <input id="phone" name="tel" ng-model="tel" type="text" required> <label for="phone">Номер телефона *</label> <input id="email" name="email" ng-model="email" type="email" required> <label for="email">Адрес электронной почты *</label> <textarea id="message" name="message" ng-model="message"></textarea> <label for="message">Комментарии</label> </form> angular .module('Calc',[]) .controller('CalcController', function($scope, $http) { $scope.outerScope = {}; $scope.data = {}; $scope.url = 'page.html'; $scope.submit = function(isValid) { if (isValid) { $http.post($scope.url, {"name": $scope.name, "email": $scope.email, "message": $scope.message }). success(function(data, status) { console.log(data); $scope.status = status; $scope.data = data; $scope.result = data; }) }else{ alert('Form is not valid'); } } }); |
только что попробовал проверить вот так
$http.post($scope.url, {"name": "$scope.name", "email": "$scope.email", "message": "$scope.message" }) и всё равно получил такой же результат |
Причин может быть много, и скорее всего все яйца выеденного не стоят - кэш браузера, тупо не передаются значения, $scope не доступен там откуда ты его пытаешься взять и пр.
Научись пользоваться отладчиком - f12, встань на то место где формируется запрос, проверь что все ок. |
вот я попробовал в консоли посмотреть содержимое POST запроса
Странным показалось то, что в скрипте я пытаюсь передать вот эти вещи $scope.name, $scope.email, $scope.message. А на сервер вместо них отправляются значения всех полей, которые имеют тег name. Но мыслей по решению проблемы это мне никаких не прибавило. Content-Type: multipart/form-data; boundary=---------------------------11951679631998 Content-Length: 1023 -----------------------------11951679631998 Content-Disposition: form-data; name="_token" e5BHE37nNgme9AXpdpt1o61AgIElB5liPipWqYlL -----------------------------11951679631998 Content-Disposition: form-data; name="calc" saunadoor -----------------------------11951679631998 Content-Disposition: form-data; name="radio" Стандартный -----------------------------11951679631998 Content-Disposition: form-data; name="glass" object:3 -----------------------------11951679631998 Content-Disposition: form-data; name="korobka" object:8 -----------------------------11951679631998 Content-Disposition: form-data; name="name" Ð˜Ð»ÑŒÑ -----------------------------11951679631998 Content-Disposition: form-data; name="tel" 1234567 -----------------------------11951679631998 Content-Disposition: form-data; name="email" 123@mail.ru -----------------------------11951679631998 Content-Disposition: form-data; name="message" -----------------------------11951679631998-- |
Делай тестовый пример
|
это как?
насколько я понимаю в онлайн сервисах типа jsfiddle воспроизвести отправку данных на сервер не получится |
Получится, просто запрос не уйдет. Но то что нам требуется покажет
|
|
Как я и говорил - учись пользоваться отладчиком.
Во первых в урл ты суешь невероятное http://steklo.dev/izdeliya-iz-stekla...eri-dlya-sauny - если отправлять его с codepen то это явный кроссдоменный запрос. Если посмотреть на вкладке network Ангуляр подменяет твой post запрос на options. Замени урл на /test и вуаля - запрос ушел. Укажи относительный путь для запроса |
действительно, изменив урл вот так на codepen все заработало
$scope.url = '/izdeliya-iz-stekla/steklyannye-dveri/steklyannye-dveri-dlya-sauny'; по крайней мере в консоли я вижу json данные из scope а вот на локалке это не помогло я приложил скриншоты консолей |
К этому скрину еще и телескоп приложить не помешало бы
|
тут картинки почему-то автоматически уменьшаются в 3 раза от моего оригинала.
вот ссылки на картинки https://yadi.sk/i/P3eejjArtBJuZ https://yadi.sk/i/-5Mkb1uUtBJud |
На твоих скринах я увидел краюшку того что уходит на сервер(и уходит оно почему то в формате form-data), и не увидел ответа вообще.
Сейчас не могу ничего сказать почему у тебя отправляется в form-data, хотя это и не косяк в принципе. Смотри на форму, отлаживайся на бэкэнде, смотри что приходи и что возвращается. |
а что может изменить формат сообщения на form-data?
у меня на бэкенде laravel 5 если я в скрипте пишу dd( Input::json() );то получаю такой ответ как на скриншоте ParameterBag {#211 ▼ #parameters: [] } а если так dd( Input::all() );то ответ такой, то есть только поля с заполненным атрибутом name array:9 [▼ "_token" => "WxC7nWvurGkS1w9pAw1KC9044pGQ34uirlWWGXo8" "calc" => "saunadoor" "radio" => "Стандартный" "glass" => "object:3" "korobka" => "object:8" "name" => "Fedor" "tel" => "1234567" "email" => "tet@mail.com" "message" => "" ] |
данные не в формате json поэтому и #parametrs[].
Про форм дату здесь можно зачитать https://learn.javascript.ru/xhr-forms |
Часовой пояс GMT +3, время: 22:40. |