Как отправить переменную в промежуточное ПО, используя jquery ajax - PullRequest
1 голос
/ 15 января 2020

Как получить доступ к переменной word в моем промежуточном программном обеспечении, отправленном с JQuery AJAX вызова.

AJAX

 ....code 

 $.ajax({
          url: "/getWords",
          word: word,   //value wanting to send!!!
          success: function(result) {
            var myJSON = result;
            console.log(myJSON);

          }
        });

Промежуточное программное обеспечение:

app.get("/getWords", function(req, res, done) {
         console.log("req.body = ", req.body);   //undefined ??? Looking for 'word' value

      });

req.body регистрирует неопределенные журналы req.params {}. парсер тела установлен.

Спасибо

ОБНОВЛЕНИЕ : Это мой код, основанный на отзывах:

//script.js

 $.ajax({
          url: "/getWords",
          data: {word: "value"},
          processData: false,
          dataType : "json",
          contentType: "application/json; charset=utf-8",
          processData: false,
          success: function(result) {
                   var myJSON = result;
          }
        });

//server.js
const bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));


app.get("/getWords", function(req, res) {
            console.log("value = ", req.query);  
    });
     });

К сожалению, в консоли я получаю - значение = {}. Что я тут не так делаю?

Ответы [ 2 ]

1 голос
/ 15 января 2020

Я предлагаю обещать ваш ajax вызов , только если вы запускаете ajax с nodeJS на стороне сервера - следующее работает для меня как чудо.

Если вы не хотите давать обещания, просто попробуйте код, содержащийся в /////

import $ from 'jquery'

export const myFunc = word => {
    return new Promise((resolve, reject) => {

      ///// don't use 3 lines before this if running ajax on client side

        var args = {
            "word": word
        }
        $.ajax({

            url: "/getWords",
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            type: "POST",
            dataType : "json",
            contentType: "application/json; charset=utf-8",
            data : args,
            error: function(err) {
                reject(err)
            },
            success: function(data) {
                resolve(data)
            }
        })

    ///// don't use after this if client side

    })
})
1 голос
/ 15 января 2020

ajax() Необязательный параметр метода «settings» не имеет допустимой опции «word». Пожалуйста, используйте { data : { word : word} } для передачи переменной с запросом (обратите внимание, что она будет интерпретироваться как строка запроса, отключите флаг processData).

Пример запроса

$.ajax({
  url: 'myurl',
  data: {
    myVar: myVal
  },
  success: (data,status,jqXHR) => {}
});

Обновление

В дополнение к ответу Nelles, если вы хотите получить доступ к телу запроса, вам следует использовать промежуточное ПО app.post() (при условии, что вы хотите отправка данных с помощью POST-запросов) + установить method опцию на ajax() правильно позвонить.

Ссылка

  1. JQuery ajax() метод ссылка
  2. Express post() метод ссылка
  3. метод GET ссылка в MDN
...