axios.post автоматически соединяет URL с моими параметрами - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу реализовать API с vue и axios в моем внешнем интерфейсе:

methods:{
  startSpider:function(event){
    alert("spider is ready to run!");

    let data = {'searchKey':this.searchKey,
            'category':this.category,
            'num':this.num};
    axios.post("{% url 'main:getCommodityInfo'%}",
                data,
                {headers:{'X-CSRFToken': this.getCookie('csrftoken')}})
        .then(response=>{
          console.log(response.data)
        })
        .catch(error=>{
          console.log(error);
          alert("connection has error")
        })
  },

Когда я вызываю эту функцию, я ожидаю получить данные из внутреннего интерфейса и остаться на исходном URL,Он получает данные, но URL-адрес быстро изменился.

После некоторого исследования я обнаружил, что браузер реализует два запроса!Сначала POST, а затем GET:

Используя 'searchKey': 'switch', 'category': 'electronic', 'num': 60 в качестве примера.enter image description here

и URL моего браузера впоследствии изменится на enter image description here

Почему это происходит?Я только что использовал POST, а не GET.Кажется, что сообщение axios автоматически соединяет исходный URL с параметрами.Я перепробовал много способов, но не смог.Даже я написал небольшое демо с похожей структурой, чтобы проверить, но демо работает хорошо!Что случилось?Помогите мне, пожалуйста ...


Обновлено I: укажите поведение моего сервера (django-view) и мой маршрутизатор имеет отношение path('getCommodityInfo/',views.getCommodityInfo, name = 'getCommodityInfo')

def getCommodityInfo(request):
    print(request.body)
    return JsonResponse({"data":True}, safe=False)

Обновлено II:Дайте мою внешнюю форму:

                <form>
                    <label for="searchKey">KeyWords</label>
                    <input v-model="searchKey" placeholder="Input Search Key" type="string" class="form-control" id="searchKey" name="searchKey">

                    <label for="category">Commodity Category</label>
                    <select v-model="selected" id="category" name="category">
                        <option v-for="option in options" v-bind:value="option.value">
                            ${option.text}
                        </option>
                    </select>
                    <br>
                    <label for="num">Amount</label>
                    <input v-model="num" placeholder="Input amount needed" type="string" class="form-control" id="num" name="num" >
                    <button v-on:click="startSpider"  class="btn btn-default">Submit</button>
                    <p>KeyWords : ${ searchKey }</p>
                    <p>Category : ${ selected }</p>
                    <p>Amount: ${ num }</p>
                </form>

1 Ответ

0 голосов
/ 17 апреля 2019

Ошибка произошла из-за не установки типа кнопки.Мы могли бы проверить this :

Отсутствующим значением по умолчанию является состояние кнопки отправки.

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

Измените кнопку следующим образом:

<button v-on:click="startSpider"  class="btn btn-default" type='button'>Submit</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...