строка JavaScript в переменную - PullRequest
4 голосов
/ 09 января 2011

Я получаю строку JSON из вызова ajax и хочу преобразовать значение в предопределенную переменную:

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"}

Ответы [ 5 ]

5 голосов
/ 09 января 2011
var strings = {"predefined":"hello world"};
alert(strings[foo.msg]);

или, например,

var messages = {};
messages.success_msg = "Your email is send successfully!";

// ...
            msg.text(messages[data.msg]).addClass("email-msg-success");             
2 голосов
/ 09 января 2011

Как насчет этого - просто используйте сообщение, встроенное при успехе, и даже не пытайтесь сделать его частью JSON.В случае ошибки включите все сообщение и используйте его напрямую.Кроме того, я бы попросил ваш сервер вернуть что-то вроде:

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

Если и только если вы начнете многократно использовать свои сообщения для нескольких функций, то выполните рефакторинг к словарю сообщений и оттуда получите ссылку на него.Обратите внимание, что ваш 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");
        }
    }
});
0 голосов
/ 09 января 2011

IFF Я понимаю, что вы спрашиваете, я думаю, у меня есть все части здесь.

У вас есть переменная predefined, и вы хотите иметь возможность вернуть ее в свой JSON и получить в результатеанализируемый объект содержит значение в predefined

JSON.parse не будет работать для вас (по крайней мере, в Chrome), но eval будет.

var predefined = "Hi! I'm predefined";
// ...

var json = '{"foo": predefined}'; // notice no quotes
var response = eval("(" + json + ")");
alert(response.foo);
0 голосов
/ 09 января 2011
var out = eval(foo.msg); // out is now "hello world"

Примечание: не используйте eval(), если вы не уверены, что такое содержание foo.msg.

или

var out = foo.msg=="predefined" ? predefined : foo.msg;
0 голосов
/ 09 января 2011
var predefined = "hello world";
var foo = {"msg":predefined}; // JSON string
alert(foo.msg)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...