javascript字符串到变量
我从ajax调用接收到一个JSON字符串,并希望将一个值转换为预定义变量:javascript字符串到变量,javascript,string,variables,Javascript,String,Variables,我从ajax调用接收到一个JSON字符串,并希望将一个值转换为预定义变量: var predefined = "hello world"; var foo = {"msg":"predefined"}; // JSON string 我想回显访问它的标准字符串 alert(foo.msg) 编辑:为了让答案更清楚,我的电话是: var success_msg = "Your email is send successfully!"; $.ajax({ url: "ajax-shar
var predefined = "hello world";
var foo = {"msg":"predefined"}; // JSON string
我想回显访问它的标准字符串
alert(foo.msg)
编辑:为了让答案更清楚,我的电话是:
var success_msg = "Your email is send successfully!";
$.ajax({
url: "ajax-share-email.php",
type: "POST",
dataType: "json",
data: {},
success: function(data) {
if (data.status == "success") {
msg.text(data.msg).addClass("email-msg-success");
} else {
msg.text(data.msg).addClass("email-msg-error");
}
}
})
ajax-share-email.php响应:
{"status":"success", "msg":"success_msg"}
或例如
var messages = {};
messages.success_msg = "Your email is send successfully!";
// ...
msg.text(messages[data.msg]).addClass("email-msg-success");
var预定义=“你好世界”;
var foo={“msg”:预定义的};//JSON字符串
警报(foo.msg)
?
注意:如果不确定foo.msg
的内容,请不要使用eval()
或
如果我理解你的要求,我想我这里有所有的部分
您有一个预定义的变量,您希望能够在json中返回该变量,并使得到的解析对象包含预定义的中的值
JSON.parse对您不起作用(至少在Chrome中不起作用),但eval会起作用
var predefined = "Hi! I'm predefined";
// ...
var json = '{"foo": predefined}'; // notice no quotes
var response = eval("(" + json + ")");
alert(response.foo);
这样如何——只需在成功时使用消息内联,甚至不用麻烦将其作为JSON的一部分。在出现错误时,一定要包含整个消息并直接使用它。另外,我希望您的服务器返回如下内容:
{ "status": true }
或
然后,您可以将其作为布尔值进行计算,而无需将其与字符串值进行比较
$.ajax({
url: "ajax-share-email.php",
type: "POST",
dataType: "json",
data: {},
success: function(data) {
if (data.status) {
msg.text('Your email has been sent successfully!').addClass("email-msg-success");
} else {
msg.text(data.msg).addClass("email-msg-error");
}
}
});
如果且仅当您开始为多个函数重用消息,然后重构到消息字典并从那里引用它。注意,您的messages
对象可能需要是一个全局变量,或者至少在使用它的所有函数的外部范围内
var messages = {};
messages.mail_success = 'Your email has been sent successfully!';
messages.post_success = 'Your data has been updated!';
$.ajax({
url: "ajax-share-email.php",
type: "POST",
dataType: "json",
data: {},
success: function(data) {
if (data.status) {
msg.text(messages.mail_success).addClass("email-msg-success");
} else {
msg.text(data.msg).addClass("email-msg-error");
}
}
});
为什么不在服务器端保留预定义的消息,只发送实际的消息?@tvanfosson可能会让JSON保持较小。我现在正在重新考虑,干杯@TvFason另一个很好的理由是从MVC角度考虑这个问题。服务器可能是一个发送模型级信息的外部API,而客户端则充当视图,将极客响应代码转换为漂亮的HTML和人类可读的消息。@Hemlock-是的,也许在某些情况下这将是一个真正的性能胜利(例如,大量大消息和高频AJAX调用),但是,在服务器端这样做会带来更简单的客户端和更快的初始下载。我需要确信这是非常必要的。如果每条消息只保存几十个甚至几百个字节,那么真的有必要吗?eval
是邪恶和危险的。几乎没有任何情况下使用它是一个好主意。(这不是其中之一。)为什么会被否决@Phrogz:如果数据来源安全,有什么问题+1我知道这是邪恶的,但这是一种获得结果的方式。投票结果很可能是在一个网站上使用eval(foo.msg)suggestions@FFish:您对发送的JSON数据有绝对控制权吗?换句话说,它不是来自任何类型的用户输入,也不是来自其他服务器?如果我必须在客户机上这样做,这可能就是我会使用的方法。不过,我的首选是将消息字典保存在服务器上,只将实际消息发送到客户端。我想在某些情况下,在客户端加载所有消息(我必须假设一定会有更多消息)是有意义的,但我必须确信。+1是唯一(或第一个)真正理解请求内容的人。@FFish编辑以提供一个包含示例哦,您正在将其包装到一个对象中。非常感谢你的帮助!向下投票是因为(正如在另一个答案上所评论的):eval不仅在总体上是危险的(尽管在本例中可能不是),而且速度也很慢,需要浏览器启动lexer和parser。当需要动态查找属性时,这是一个糟糕的答案,它还天真地鼓励使用eval
和全局变量。很少有情况下应使用eval
;这不是其中之一。@Phrogz我不同意。在这种情况下,eval是有用的(尽管在注入方面实际上可能是危险的)。当它被用来代替括号符号时,它是邪恶的。这种对eval
的下意识恐惧是愚蠢的。进一步-eval是支持旧版本IE的最快解决方案,并提供了适合问题形式的解决方案。
var predefined = "Hi! I'm predefined";
// ...
var json = '{"foo": predefined}'; // notice no quotes
var response = eval("(" + json + ")");
alert(response.foo);
{ "status": true }
{ "status": false, "msg": "The mail server is down." }
$.ajax({
url: "ajax-share-email.php",
type: "POST",
dataType: "json",
data: {},
success: function(data) {
if (data.status) {
msg.text('Your email has been sent successfully!').addClass("email-msg-success");
} else {
msg.text(data.msg).addClass("email-msg-error");
}
}
});
var messages = {};
messages.mail_success = 'Your email has been sent successfully!';
messages.post_success = 'Your data has been updated!';
$.ajax({
url: "ajax-share-email.php",
type: "POST",
dataType: "json",
data: {},
success: function(data) {
if (data.status) {
msg.text(messages.mail_success).addClass("email-msg-success");
} else {
msg.text(data.msg).addClass("email-msg-error");
}
}
});