通过$ .ajax发送javascript对象

时间:2015-11-13 21:52:19

标签: javascript ajax object

我想通过$ .ajax请求发送像这样的javascript对象:

 var o = {
   a: 1, 
   b: 'dummy string', 
   c: ['a', 1, {}], 
   d: {dd: 1}, 
   e: new Date(), 
   f: function() {
        console.log('here');
   }
}

我知道我通常应该在将它发送到我的php脚本之前使用JSON.stringify。问题是JSON.stringify,删除它无法进行字符串化的属性:

JSON.stringify(o);

returns this ->

"{
  "a":1,
  "b":"dummy string",
  "c":["a",1,{}],
  "d":{"dd":1},
  "e":"2015-11-13T21:34:36.667Z"
}"

但是我要做什么,如果我想在mysql专栏中存储像这样的“o”javascript对象作为纯文本

o = {
   a: 1, 
   b: 'dummy string', 
   c: ['a', 1, {}], 
   d: {dd: 1}, 
   e: new Date(), 
   f: function() {
        console.log('here');
   }
}

2 个答案:

答案 0 :(得分:3)

你可以试试这个:

var o = {
   a: 1, 
   b: 'dummy string', 
   c: ['a', 1, {}], 
   d: {dd: 1}, 
   e: new Date(), 
   f: function() {
        console.log('here');
   }
};

o.f = o.f.toString();
var stringy = JSON.stringify(o);
document.getElementById('test2').innerHTML = stringy;

小提琴:http://jsfiddle.net/e2cxandt/

显然这需要稍微更改,所以你不要通过克隆对象来覆盖函数,但作为一个简单的例子,你可以看到它现在在字符串中有属性。

正如上面评论中提到的那样,war10ck,这里是使用JSON.stringify的replacer参数的一个例子

var o = {
   a: 1, 
   b: 'dummy string', 
   c: ['a', 1, {}], 
   d: {dd: 1}, 
   e: new Date(), 
   f: function() {
        console.log('here');
   }
};

function replacer (key, value) {
  if (typeof value === "function") {
    return value.toString();
  }
  return value;
}

var stringy2 = JSON.stringify(o, replacer);
document.getElementById('test2').innerHTML = stringy2;

小提琴:http://jsfiddle.net/e2cxandt/1/

答案 1 :(得分:1)

一些通用(非特定实例)选项:

您可以在任何对象上定义custon toJSON:

Function.prototype.toJSON=function(){return String(this);}; 

JSON.stringify({a:1, b:function(){alert(123)}});

显示:

{"a":1,"b":"function (){alert(123)}"}

一个警告是,您的函数文字被引用为字符串而不再是函数。如果需要,可以使用reviver参数来修复JSON.parse()。

更好的选择: 使用替换arg到JSON.stringify()

JSON.stringify({a:1, b:function(){alert(123)}}, function(k,v){
  if(typeof v==="function") return String(v);
  return v;
});

显示:

{"a":1,"b":"function (){alert(123)}"}

这种方式特别好,因为您无需修改​​内置对象或实例对象。