Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript字符串到变量_Javascript_String_Variables - Fatal编程技术网

javascript字符串到变量

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

我从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-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");
        }
    }
});