Передача объекта в качестве параметра - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь отправить объект (массив JSON) в xmlHttprequest в функции. Если я жестко закодирую переменную body внутри функции getToteMatrix, это сработает. Но когда я пытаюсь передать переменную body в функцию извне функции, я получаю ошибку 500.

  • объявление переменной тела внутри функции:)
  • вызов функции и передача переменной тела функции. (
  • передача переменной тела непосредственно в функцию: (
getToteMatrix(body);

var body = '{"Action":"<must be non blank>", "SubAction":"", "Cart":"", "CartPositions":1,"OverallTC":false, "ErrorMessage":"","UserResponse1":"","UserResponse2":"","UserResponse3":"","DisplayData":[{"Part":"", "PartDesc1":"", "PartDesc2":"", "UserField":"", "Location":"", "DirectionalDisplay":"", "TotalPickQty":"5", "StartingAisle":"","FullTote":"", "FullToteQty":"", "NewToteQty":""}    ],"BatchData":[{"RemainingPickLines":0, "RemainingLocs":0, "CurrentPicksPerHourRate":0.000}],"AlphaPos":[{"Pos": 1, "PrimaryModule":1, "SecondaryModule":3, "Message":"1111", "Color": 1, "BlinkSpeed": 0, "Buzzer": true, "Enable":true},{"Pos": 2, "PrimaryModule":2, "SecondaryModule":4, "Message":"2222", "Color": 1, "BlinkSpeed": 0, "Buzzer": false, "Enable":true}],"BatchPos": [{"Pos": 15, "PrimaryModule":1, "SecondaryModule":51, "Display":"*15*", "TC":false, "Color":1, "BlinkSpeed":0, "Enable":true, "Visible":true}, {"Pos": 2, "PrimaryModule":2, "SecondaryModule":52, "Display":"2222", "TC":false, "Color":1, "BlinkSpeed":0, "Enable":true, "Visible":true}, {"Pos": 5, "PrimaryModule":5, "SecondaryModule":55, "Display":"FIVE", "TC":false, "Color":1, "BlinkSpeed":0, "Enable":true, "Visible":true},{"Pos": 3, "PrimaryModule":3, "SecondaryModule":53, "Display":"3333", "TC":false, "Color":1, "BlinkSpeed":0, "Enable":true, "Visible":false},{"Pos": 4, "PrimaryModule":4, "SecondaryModule":54, "Display":"4444", "TC":false, "Color":1, "BlinkSpeed":0, "Enable":true, "Visible":true}]}';

function getToteMatrix(body) {
    // when the body variable is declared here the xml request works just fine.           
    // var body = (above json)

    var xmlhttp = new XMLHttpRequest();
    var url = "http://promat.dovetree.com/cart/cart/batchpos";

    xmlhttp.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {
            document.getElementById("id01").innerHTML = this.responseText;
        }
    };
    xmlhttp.open("POST", url, true);
    xmlhttp.send(body);
}

Функция должна принимать данные и выводить их в формате HTML, отправленном с сервера. Я получаю ошибку 500 с переменной, объявленной вне функции.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019
function getToteMatrix(body) {
    console.log(body);
}
// first call
var body = 'text';
getToteMatrix(body);

// second call
var anotherBody = 'anotherBody';
getToteMatrix(anotherBody);

Здесь Вам нужно вызывать вот так. Сначала нужно написать функцию, а затем вызвать функцию. В противном случае вы не сможете получить правильный ответ.

0 голосов
/ 07 июля 2019

Я думаю, вы получите ошибку 500, потому что время, которое вы вызываете getToteMatrix() с параметром body, body равно undefined .

Из-за подъема , компилятор javascript читает переменные следующим образом:

getToteMatrix // function reference
anotherBody
body

Объявления функций предшествуют объявлениям переменных.

Проверьте следующий пример:

  • При первом вызове getToteMatrix(body), body не определено.
  • Во второй раз, когда вызывается getToteMatrix(anotherBody), мы объявили anotherBody перед этим вызовом, поэтому он выводится на консоль.

getToteMatrix(body);

var anotherBody = 'anotherBody';
getToteMatrix(anotherBody);

var body = 'text';
function getToteMatrix(body) {
    console.log(body);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...