2015-04-29 3 views
0

Я пытаюсь сделать запрос POST с использованием полимерного ядра-ajax для сервера runnung golang. После большого поиска (потому что я новичок в этом материале), я закончил со следующим кодом. Кроме того, запрос GET работает идеально. Параметры POST я не понимаю, как пройти с помощью core-ajax.Отправьте запрос на сервер golang с использованием полимерного ядра-ajax?

<polymer-element name="register-user" attributes="url"> 
    <template> 
     <core-ajax id="ajaxSubmit" url="{{url}}" contentType="application/json" handleAs="json" method="post" on-core-response="{{response}}"></core-ajax> 
     <style type="text/css"> 
     </style> 
    </template> 
    <script> 
    Polymer({ 
     buttonListener: function() { 
      var data = '{"Name":"'+ this.name +'", "Email":"'+ this.email +'"}'; 
      this.$.ajaxSubmit.data = data; 
      this.$.ajaxSubmit.go(); 
      console.log(data); 
     }, 
     response: function(oldValue){ 
      console.log(this.response); 
     } 
    }); 
    </script> 
</polymer-element> 

выше код возвращает 500 (Internal Server Error) однако, когда я сделать запрос POST с помощью завивки ИЭ

curl -i -H 'Content-Type: application/json' -d '{"Name":"Batman",  
    "Email":"[email protected]"}' http://so.me.ip.ad:8080/register 

он работает, как он должен и возвращает

HTTP/1.1 200 OK 
Content-Type: application/json 
X-Powered-By: go-json-rest 
Date: Wed, 29 Apr 2015 05:40:15 GMT 
Content-Length: 117 

{ 
    "id": 3, 
    "name": "Batman", 
    "email": "[email protected]", 
    "createdAt": "2015-04-29T05:40:15.073491143Z" 
} 

также, у меня есть набор промежуточного CORS на уровне

api.Use(&rest.CorsMiddleware{ 
    RejectNonCorsRequests: false, 
    OriginValidator: func(origin string, request *rest.Request) bool { 
     return origin == "http://0.0.0.0:8000" 
    }, 
    AllowedMethods: []string{"GET", "POST", "PUT"}, 
    AllowedHeaders: []string{ 
     "Accept", "Content-Type", "X-Custom-Header", "Origin"}, 
    AccessControlAllowCredentials: true, 
    AccessControlMaxAge:   3600, 
}) 

Что я делаю неправильно? Любая обратная связь будет очень полезной! . Благодаря^^

Edit: здесь немного больше информации, если это может помочь .. screenshot

+0

браузеров обычно также отправлять заголовки, как «User-Agent» и «Referer» и те, которые не перечислены разрешенные заголовки в вашем CORS middelware - возможно, вот в чем проблема? – ain

+0

@ain я добавил «User-Agent» и «Referer» как AllowedHeaders, но все равно получаю 500 в ответ :( –

+0

Что вы делаете в пакетах? Попробуйте сбросить (на сервере Go) полный запрос (например: все заголовки и содержимое), чтобы проверить, что отличается между вашим запросом 'curl' и вашим запросом полимера. – LeGEC

ответ

2

Я думаю, что CORS является отвлекающим маневром. Проблема может заключаться в том, что вы отправляете кодировку данных, а не как json. Я нашел ошибку у пользователя с similar problem.

HTTP/1.1 500 Internal Server Error 
Content-Type: application/json 
X-Powered-By: go-json-rest 
Date: Fri, 12 Dec 2014 04:29:59 GMT 
Content-Length: 71 

{ 
    "Error": "invalid character '\\'' looking for beginning of value" 
} 

Может быть, вы должны использовать .body вместо .data? См. this answer.

Из полимера documentation:

тела: Необязательно сырого содержимого тела для отправки когда метод === "POST".

Пример:

<core-ajax method="POST" auto url="http://somesite.com" 
    body='{"foo":1, "bar":2}'> 
</core-ajax> 
+0

Спасибо, это сработало! Мне пришлось работать вокруг CORS хотя (переместил мой полимерный код в тот же домен) –

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