【问题标题】:console.log(data) to json file in javascriptconsole.log(data) 到 javascript 中的 json 文件
【发布时间】:2018-10-10 22:57:49
【问题描述】:

我正在处理带有表单的一页。

下面的 JS 脚本我需要帮助

当我按下提交时,我在 console.log 中获取数据,但我想要在服务器上的 json 文件或 xml 数据中,但每次我更改表单中的某些内容以在该文件中添加新数据时,而不是创建新数据文件

有什么帮助吗?

;(function($) {
  $.fn.toJSON = function() {
    var $elements = {};
    var $form = $(this);
    $form.find('input, select, textarea').each(function() {
      var name = $(this).attr('name')
      var type = $(this).attr('type')
      if (name) {
        var $value;
        if (type == 'radio') {
          $value = $('input[name=' + name + ']:checked', $form).val()
        } else if (type == 'checkbox') {
          $value = $(this).is(':checked')
        } else {
          $value = $(this).val()
        }
        $elements[$(this).attr('name')] = $value
      }
    });
    return JSON.stringify($elements)
  };
  $.fn.fromJSON = function(json_string) {
    var $form = $(this)
    var data = JSON.parse(json_string)
    $.each(data, function(key, value) {
      var $elem = $('[name="' + key + '"]', $form)
      var type = $elem.first().attr('type')
      if (type == 'radio') {
        $('[name="' + key + '"][value="' + value + '"]').prop('checked', true)
      } else if (type == 'checkbox' && (value == true || value == 'true')) {
        $('[name="' + key + '"]').prop('checked', true)
      } else {
        $elem.val(value)
      }
    })
  };
}(jQuery));

$(document).ready(function() {
  $("#_save").on('click', function() {
    console.log("Saving form data...")
    var data = $("form#test-form").toJSON()
    console.log(data);
    localStorage['form_data'] = data;

    return false;
  })

});

【问题讨论】:

  • 查看 AJAX/JSON - 你需要一个像 PHP 或类似的服务器进程
  • Javascript 是一种客户端语言——它不能直接与服务器通信。您需要对执行这些操作的服务器端脚本进行 Ajax 调用。
  • 你的服务器端是什么?

标签: javascript jquery html json xml


【解决方案1】:

如果您使用的是 jQuery,那么您可以像这样轻松地序列化表单:

$("form-selector").on("submit", function(event) {
    event.preventDefault();
    let form_data = $(this).serialize();
    console.log(form_data);
});

从你的帖子来看,你想对序列化的表单数据做什么并不完全清楚。如果您想将该数据发布到服务器并将其保存为文件,那么这是一个完全不同的主题。您没有提供有关您的服务器端技术的任何信息 - 是 PHP、.NET、nodeJS、Python 还是...

不管怎样……不管你的服务器端技术如何,你都可以通过 jQuery 的 post 方法 (https://api.jquery.com/jquery.post/) 发布序列化数据:

let some_data = {field_name: 'Some name', field_surname: 'some surename', field_other: 'some other data'};
let jqxhr = $.post("http://example-host.com/service.php", some_data)
  .done(function() {
    console.log("success");
  })
  .fail(function() {
    console.log("error");
  })
  .always(function() {
    alert("finished");
  });

完全(客户端 JS):

$("form-selector").on("submit", function(event) {

    event.preventDefault();
    let form_data = $(this).serialize();
    console.log('Form data', form_data);

    let posting = $.post("http://example-host.com/service.php", form_data);

    posting.done(function() {
        console.log("Form data ajax post - success");
    });

    posting.fail(function() {
        console.log("Form data ajax post - error");
    });

    posting.always(function() {
        alert("Form data ajax post - finished");
    });

});

【讨论】:

    【解决方案2】:

    已经从表单序列化数据

    这是表格

    <form id="test-form"">
        <div class="container-fluid">
                <nav class="navbar navbar-dark bg-primary">
                    <a class="navbar-brand" href="/">
                            <h2><strong>Scan Vehicle Barcode</strong></h2>
                            <p>Click the <strong>button</strong> next to the input-field to start scanning an barcode</p>
                    </a>
                    <div class="pos-f-t">
                            <nav class="navbar navbar-dark bg-primary">
                                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
                                    <span class="navbar-toggler-icon"></span>
                                </button>
                            </nav>
                            <div class="collapse" id="navbarToggleExternalContent">
                              <div class="bg-primary p-4">
                                <a href="/" ></a>
                              </div>
                            </div>
                          </div>
                </nav>
                <div class="input-field">
                        <div class="alert alert-info" role="alert">
                            <label for="isbn_input">EAN:</label>
                            <input id="isbn_input" class="isbn" type="text" name="barcode" />
                            <button type="button" class="btn btn-outline-success my-2 my-sm-0 scan"><i class="fa fa-barcode"></i>&nbsp;Scan Barcode</button>
                        </div>
                </div>
                <div class="alert alert-info" role="alert">
                        <div class="form-check form-check-inline">
                                <input class="form-check-input" type="radio" name="vehiclecategory" id="inlineRadio1" value="CHASSIS">
                                <label class="form-check-label" for="inlineRadio1">CHASSIS</label>
                        </div>
                        <div class="form-check form-check-inline">
                                <input class="form-check-input" type="radio" name="vehiclecategory" id="inlineRadio2" value="SCATTOLINI">
                                <label class="form-check-label" for="inlineRadio1">SCATTOLINI</label>
                        </div>
                        <div class="form-check form-check-inline">
                                <input class="form-check-input" type="radio" name="vehiclecategory" id="inlineRadio3" value="VAN">
                                <label class="form-check-label" for="inlineRadio1">VAN</label>
                        </div>
                </div>
                <div class="alert alert-info" role="alert">
                    <div class="col-md-4">
                            <div class="form-group">
                                <label for="sel1">Position:</label>
                                <select class="form-control" id="sel1" name="trainposition">
                                    <option></option>
                                    <option>A</option>
                                    <option>B</option>
                                    <option>C</option>
                                </select>
                            </div> 
                            <div class="form-group">
                                <label for="sel1">Wagon:</label>
                                <select class="form-control" id="sel2" name="wagonposition">
                                        <option></option>
                                        <option>34</option>
                                        <option>35</option>
                                        <option>36</option>
                                        <option>37</option>
                                        <option>38</option>
                                        <option>39</option>
                                        <option>40</option>
                                        <option>41</option>
                                        <option>42</option>
                                        <option>43</option>
                                        <option>44</option>
                                        <option>45</option>
                                        <option>46</option>
                                        <option>47</option>
                                        <option>48</option>
                                        <option>49</option>
                                        <option>50</option>
                                        <option>51</option>
                                        <option>52</option>
                                        <option>53</option>
                                        <option>54</option>
                                        <option>55</option>
                                        <option>56</option>
                                        <option>57</option>
                                        <option>58</option>
                                        <option>59</option>
                                        <option>60</option>
                                        <option>61</option>
                                        <option>62</option>
                                        <option>63</option>
                                </select>
                            </div>
                    </div>
                </div>
                <div class="alert alert-info" role="alert">
                        <input type='submit' id='_save' value='SUBMIT THE VEHICLE' class="btn btn-primary btn-lg">
                </div>
        </div>
    </form>
    

    简单的条码扫描器并收集一些数据。

    所有这些都运行良好,我的数据保存在 console.log() 中

    我希望将 console.log 中的数据保存在 .json 或 .xml 等文件中

    服务器端nodeJS

    enter image description here enter image description here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多