#javascript #json
Вопрос:
У меня есть массив JavaScript, который, среди прочего, содержит URL-адрес. Если я попытаюсь просто поместить URL-адрес на страницу (массив находится в проекте с участием Yahoo! Maps API) он показывает URL-адрес таким, каким он должен быть.
Но если я попытаюсь сделать перенаправление или просто сделать «оповещение» об элементе массива ссылок, я получу:
функция(){возвращает JSON.кодировать(это);}
Насколько я понимаю, это связано с тем, что браузер выполняет кодировку JSON.encode при отображении страницы, поэтому ссылка отображается нормально. Я попробовал несколько методов, чтобы перенаправить его (это то, что я хочу сделать со ссылкой) правильно (включая использование «eval»), но безуспешно.
После выполнения некоторых предложений я запустил eval('(' jsonObject ')')
, но он все равно возвращает тот же результат.
Так как же это делается ?
Комментарии:
1. Непонятно, что вы имеете в виду… можете ли вы опубликовать больше примеров кода? Фактическое содержимое массива и вызов перенаправления были бы очень полезны.
Ответ №1:
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
Ответ №2:
Предположим, у вас есть массив в PHP в виде $iniData с 5 полями. При использовании ajax —
echo json_encode($iniData);
В Javascript используйте следующее :
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "GET",
url: "ajaxCalls.php",
data: "dataType=ini",
success: function(msg)
{
var x = eval('(' msg ')');
$('#allowed').html(x.allowed); // these are the fields which you can now easily access..
$('#completed').html(x.completed);
$('#running').html(x.running);
$('#expired').html(x.expired);
$('#balance').html(x.balance);
}
});
});
</script>
Ответ №3:
Если вы получите это сообщение в предупреждении:
function(){return JSON.encode(this);}
когда вы пытаетесь предупредить(myArray[i]), то есть несколько возможностей:
- myArray[i] — это функция (скорее всего)
- myArray[i] — это буквальная строка «функция(){возвращает JSON.кодировать(это);}»
- У myArray[i] есть метод .toString (), который возвращает эту функцию или эту строку. Это наименее вероятно из трех.
Самый простой способ определить это-проверить typeof(myArray[i]).
Комментарии:
1. Я сомневаюсь, что это буквальная строка. Скорее всего, это функция. Я попытался «оценить(‘(‘ JSONObject ‘)’)», но все равно он возвращает тот же результат, что и раньше…
2. Да, можно было бы представить, что передача функции в eval() вызовет метод toString этой функции, возвращая строку, которая будет возвращена обратно в саму функцию. Так что в этом есть смысл.
Ответ №4:
eval('(' jsonObject ')')
Комментарии:
1. eval-это безопасный способ декодирования данных JSON только в том случае, если вы на 100% доверяете своему источнику 😀
2. Это не может быть оценено- > {«код»:200,»язык»:»en-de»,»текст»:[«строка 1″,»строка 2»]}
Ответ №5:
Декодирование JSON в JavaScript-это просто eval (), если вы доверяете строке или более безопасному коду, который вы можете найти на http://json.org если ты этого не сделаешь.
Затем у вас будет структура данных JavaScript, которую вы сможете просмотреть для получения необходимых вам данных.
Комментарии:
1. Как я уже говорил, я попытался «оценить» элемент ссылки, но затем он вернул «неопределенный». Данные в массиве поступают в виде синтаксического анализа XML, как вы думаете, может ли это иметь какое-то отношение к этому ?
Ответ №6:
Если элемент объекта, который вы получаете, является функцией, вы можете попробовать это:
var url = myArray[i]();
Ответ №7:
Я декодирую JSON таким образом:
eval( 'var from_json_object = ' my_json_str ';' );