Не подгружаются данные посредством JSON

kdv12
На сайте с 05.12.2011
Offline
52
781

Может кто поможет советом, почему не подгружаются на стороне клиента данные по JSON?

Есть код на стороне клиента:

<script type="text/javascript" src="http://site.ru/widget.js"></script>

Вот код файла widget.js:

(function() {


var jQuery;

if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.7.1') {
var script_tag = document.createElement('script');
script_tag.setAttribute("type", "text/javascript");
script_tag.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js");
if (script_tag.readyState) {
script_tag.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
} else {
script_tag.onload = scriptLoadHandler;
}
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
} else {
jQuery = window.jQuery;
main();
}

function scriptLoadHandler() {
jQuery = window.jQuery.noConflict(true);
main();
}

function main() {
jQuery(document).ready(function($) {
var ss = document.createElement('div');
ss.setAttribute("id", "sd");
document.getElementsByTagName("body")[0].appendChild(ss);

$.getJSON("http://site.ru/widget.php", function(data) {
$('#sd').html(data.html);
});
});
}

})();

И вот собственно файл widget.php:

<?header("Content-Type:text/javascript;charset=windows-1251");


$arData = Array(
"html" => "sdfsd sdffsdfsdfsdfsfd"
);

echo "? ( " . json_encode($arData) . " )";
?>

По идее должно пользователю в браузере в созданный динамически div подгрузить тестовые данные. Но этого не происходит. Если же заменить http://site.ru/widget.php на http://al.smeuh.org/cgi-bin/webwidget_tutorial.py?callback=? то все работает (данные подгружаются).

Разработка сайтов любой сложности на 1С-Битрикс. Бесплатные консультации.
ishipilov
На сайте с 25.12.2011
Offline
101
#1

в код особо не смотрел, но есть 2 момента:

1. jQuery подключен? если нет, то подключите перед этим скриптом.

2. в файле пхп вместо

echo "? ( " . json_encode($arData) . " )";

поставьте просто

echo json_encode($arData);
kdv12
На сайте с 05.12.2011
Offline
52
#2
ishipilov:
1. jQuery подключен? если нет, то подключите перед этим скриптом.

jQuery здесь автоматически подгружается в файле widget.js. Не важно подключен ли он на стороне клиента или нет.

ishipilov:
2. в файле пхп вместо
Цитата:
echo "? ( " . json_encode($arData) . " )";
поставьте просто
Цитата:
echo json_encode($arData);

На сколько мне известно, то JSON должен возвращать некоторую функцию (либо как в моем примере анонимную функцию). Поэтому убирать там ничего не надо.

siv1987
На сайте с 02.04.2009
Offline
427
#3
kdv12:
На сколько мне известно, то JSON должен возвращать некоторую функцию (либо как в моем примере анонимную функцию). Поэтому убирать там ничего не надо.

Вам стоит освежить знания про JSON http://ru.wikipedia.org/wiki/JSON

http://learn.javascript.ru/json

Да и анонимная функция выглядит немного иначе, а это не пойми что, то ли тернарное выражение то ли еще что.

---------- Добавлено 12.05.2014 в 15:35 ----------


var ss = document.createElement('div');
ss.setAttribute("id", "sd");
document.getElementsByTagName("body")[0].appendChild(ss);

Раз уж юзаете jquery


var ss = $('<div>').attr('id', 'ss');
$('body').append(ss);
kdv12
На сайте с 05.12.2011
Offline
52
#4
siv1987:
Вам стоит освежить знания про JSON http://ru.wikipedia.org/wiki/JSON
http://learn.javascript.ru/json
Да и анонимная функция выглядит немного иначе, а это не пойми что, то ли тернарное выражение то ли еще что.

Ошибся. Не спец. в JSON.

siv1987:
Раз уж юзаете jquery
Код:

var ss = $('<div>').attr('id', 'ss');
$('body').append(ss);

Оптимизация кода, дело последнее. Важнее заставить все работать правильно.

В общем решил проблему. Необходимо в скрипте php (в моем случае это widget.php) в заголовки добавить

header("Access-Control-Allow-Origin: *");

Вместо звездочки может быть любой домен, которому разрешен доступ к данным.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий