尝试使用Javascript发布json

时间:2019-05-03 17:02:09

标签: javascript

我正在尝试发送一些数据以使用Ajax更新会话变量。我有它从jquery工作,但我试图了解如何使用javascript。几乎可以使用,但是我如何传递数据存在问题,而且我无法弄清楚出了什么问题。

这是JavaScript

  document.getElementsByClassName('page-link').forEach(function(pagelink) {
    pagelink.addEventListener('click', function() {
      var data = {questions:localStorage.getItem('formValues')};
      let request = new XMLHttpRequest();
      request.open('POST', '/default', true);
      request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
      request.send(JSON.stringify(data));
    })
  });

localStorage.getItem('formValues')从以下位置生成的:

formValues[checkbox.id] = checkbox.checked;
localStorage.setItem('formValues', JSON.stringify(formValues));

当我在控制台中检查数据对象时,它看起来像这样: {questions:“ {” test1“:true}”}

但是当使用JSON.stringify(data)发送它时,整个对象成为键,并且没有值被发送。

这是根据symfony探查器显示的密钥:

{“ questions”:“ {\” test1 \“:true,\” test2 \“:true}”}

关于我在做什么错,可能有一个非常简单的解释,但我无法弄清楚!

非常感谢向正确方向的指针。

更新:

我简化了事情

  document.getElementById('btn-send').addEventListener('click', function() {
    var data = {questions:"test"};
    var request = new XMLHttpRequest();
    request.open('POST', '/default', true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    request.send(JSON.stringify(data));
  });

和我有完全一样的问题。我也尝试过: request.setRequestHeader('Content-Type','application / json')但这也不起作用吗?

这是用于ajax请求的symfony探查器的图片:

enter image description here

谢谢 马丁(Martyn)

1 个答案:

答案 0 :(得分:0)

我找到了解决方法enter link description here

就像我怀疑json字符串化时被弄乱了一样。上面的链接使用以下代码:

function postAjax(url, data, success) {
    var params = typeof data == 'string' ? data : Object.keys(data).map(
            function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
        ).join('&');

    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    xhr.open('POST', url);
    xhr.onreadystatechange = function() {
        if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
    };
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send(params);
    return xhr;
}

这个问题可以解决。