我正在尝试发送一些数据以使用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探查器的图片:
谢谢 马丁(Martyn)
答案 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;
}
这个问题可以解决。