Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   не получается отправить JSON данные (https://javascript.ru/forum/angular/63843-ne-poluchaetsya-otpravit-json-dannye.html)

schel4ok 03.07.2016 23:45

не получается отправить 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 ▼
  #parameters: []
}


krasovsky 04.07.2016 07:53

А ты уверен что $scope.name /email/message не пустые? Не вижу других причин.
Кроме того на бэкэнде могут быть проблемы с парсингом запроса, т.к. по дефолту бэк настроен на получение данных в формате querystring. Angular шлет в формате json

schel4ok 05.07.2016 22:17

не должны быть пустыми, хотя бы потому что они 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');
            }

        }


  });

schel4ok 05.07.2016 22:42

только что попробовал проверить вот так
$http.post($scope.url, {"name": "$scope.name", "email": "$scope.email", "message": "$scope.message" })

и всё равно получил такой же результат

krasovsky 06.07.2016 08:50

Причин может быть много, и скорее всего все яйца выеденного не стоят - кэш браузера, тупо не передаются значения, $scope не доступен там откуда ты его пытаешься взять и пр.
Научись пользоваться отладчиком - f12, встань на то место где формируется запрос, проверь что все ок.

schel4ok 06.07.2016 20:05

вот я попробовал в консоли посмотреть содержимое 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--

krasovsky 07.07.2016 06:10

Делай тестовый пример

schel4ok 07.07.2016 09:59

это как?
насколько я понимаю в онлайн сервисах типа jsfiddle воспроизвести отправку данных на сервер не получится

krasovsky 07.07.2016 11:17

Получится, просто запрос не уйдет. Но то что нам требуется покажет

schel4ok 07.07.2016 23:09

вот http://codepen.io/schel4ok/pen/jrrmre

krasovsky 08.07.2016 05:57

Как я и говорил - учись пользоваться отладчиком.
Во первых в урл ты суешь невероятное http://steklo.dev/izdeliya-iz-stekla...eri-dlya-sauny - если отправлять его с codepen то это явный кроссдоменный запрос. Если посмотреть на вкладке network Ангуляр подменяет твой post запрос на options.
Замени урл на /test и вуаля - запрос ушел. Укажи относительный путь для запроса

schel4ok 08.07.2016 22:36

действительно, изменив урл вот так на codepen все заработало
$scope.url = '/izdeliya-iz-stekla/steklyannye-dveri/steklyannye-dveri-dlya-sauny';

по крайней мере в консоли я вижу json данные из scope


а вот на локалке это не помогло

я приложил скриншоты консолей

krasovsky 11.07.2016 07:21

К этому скрину еще и телескоп приложить не помешало бы

schel4ok 11.07.2016 10:35

тут картинки почему-то автоматически уменьшаются в 3 раза от моего оригинала.
вот ссылки на картинки

https://yadi.sk/i/P3eejjArtBJuZ

https://yadi.sk/i/-5Mkb1uUtBJud

krasovsky 11.07.2016 10:45

На твоих скринах я увидел краюшку того что уходит на сервер(и уходит оно почему то в формате form-data), и не увидел ответа вообще.
Сейчас не могу ничего сказать почему у тебя отправляется в form-data, хотя это и не косяк в принципе. Смотри на форму, отлаживайся на бэкэнде, смотри что приходи и что возвращается.

schel4ok 11.07.2016 10:59

а что может изменить формат сообщения на 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" => ""
]

krasovsky 11.07.2016 11:36

данные не в формате json поэтому и #parametrs[].
Про форм дату здесь можно зачитать https://learn.javascript.ru/xhr-forms


Часовой пояс GMT +3, время: 22:40.