#php #jquery #html
#php #jquery #HTML
Вопрос:
Я искал похожий вопрос, но не смог его найти. Я пытаюсь увеличить количество подписчиков twitter / facebook / rss до a <span>....</span>
на моей боковой панели.
Для получения чисел я использую некоторые php-скрипты. В отдельном файле у меня есть javascript и в моем sidebar.php файл, который у меня есть <span>....</span>
. Я пытался все отладить, но не могу найти свою ошибку.
На боковой панели я использую:
<div id="social-bar">
<ul>
<li class="rss-count"><a href="http://feeds.feedburner.com/dewereldverzamelaar"><span>..........</span></a></li>
<li class="twitter-count"><a href="http://twitter.com/deverzamelaar"><span>..........</span></a></li>
<li class="facebook-count"><a href="http://www.facebook.com/dewereldverzamelaar"><span>..........</span></a></li>
</ul>
<!--END #social-bar-->
</div>
Мои php-файлы для получения подписчиков в твиттере (например) выглядят так:
<?php
$screenName = 'deverzamelaar';
$getData = 'followers_count';
$xml = file_get_contents('http://twitter.com/users/show.xml?screen_name=' . $screenName);
if(preg_match('/' . $getData . '>(.*)</', $xml, $count) !=0)
echo "$count[1]";
?>
Наконец, у вас есть скрипт jQuery:
var count = 0;
jQuery('.rss-count span').load('http://www.dewereldverzamelaar.com/wp-content/developer/themes/gridlocked/includes/update-rss.php', function() {
count ;
tz_showSocial(count);
});
jQuery('.twitter-count span').load('http://www.dewereldverzamelaar.com/wp-content/developer/themes/gridlocked/includes/update-twitter.php', function() {
count ;
tz_showSocial(count);
});
jQuery('.facebook-count span').load('http://www.dewereldverzamelaar.com/wp-content/developer/themes/gridlocked/includes/update-facebook.php', function() {
count ;
tz_showSocial(count);
});
function tz_showSocial(count) {
if(count == 3)
jQuery('#social-bar').fadeIn(200);
}
Я знаю, что скрипты php работают, потому что они отражают нужное количество подписчиков. Я думаю, что jQuery также работает, потому что счетчик достигает 3, и появляется социальная панель div. Но он не будет показывать количество подписчиков, он продолжает показывать ….. .
Я не специалист по php / html или jQuery. Я взял несколько фрагментов и попытался создать что-то из этого.
Почему эхо-сигнал не попадает в <span></span>
? Я надеюсь, что кто-нибудь сможет объяснить и помочь мне.
Приветствую, Джонас Сметс
Здесь отредактированная версия, помните, что она уже есть в «jQuery (document) .ready(function() {» потому что загружается много других скриптов (из темы WordPress):
var count, loadCallback;
count = 0;
loadCallback = function(response, status, request) {
// Since you use the same code in all the callbacks, you might as well
// only declare the function once. Since we're doing that, we might as
// well merge tz_showSocial into here as well...
if (request.status != 200) {
alert('Oh no! Something went wrong with the update! (HTTP ' request.status ')');
}
count ;
if (count > 2) {
jQuery('#social-bar').fadeIn(200);
}
};
// As Dvir Azulay correctly points out, you should execute the AJAX calls
// in the ready event
jQuery('.rss-count span').load('/includes/update-rss.php', loadCallback);
jQuery('.twitter-count span').load('/includes/update-twitter.php', loadCallback);
jQuery('.facebook-count span').load('/includes/update-facebook.php', loadCallback);
With this version of the code there is definitely something happening: http://www.developer.dewereldverzamelaar.net
The page loads fine but goes blank? It has something to do with the jQuery script, if I take the script out the page loads fine.
If you need any extra info, please let me know.
Jonas Smets
//////////////////////////////////////////////////
Still not working, this is what I have right now:
/* here are some variables I've added for my script: */
var count, loadCallback;
count = 0;
/*-----------------------------------------------------------------------------------
Custom JS - All front-end jQuery
-----------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------*/
/* Remove JavaScript fallback class
/*-----------------------------------------------------------------------------------*/
jQuery('#container').removeClass('js-disabled');
/*-----------------------------------------------------------------------------------*/
/* Let's get ready!
/*-----------------------------------------------------------------------------------*/
jQuery(document).ready(function() {
/* here you get some other scripts the theme uses */
/* here my script start */
loadCallback = function(response, status, request) {
// Since you use the same code in all the callbacks, you might as well
// only declare the function once. Since we're doing that, we might as
// well merge tz_showSocial into here as well...
if (request.status != 200) {
alert('Oh no! Something went wrong with the update! (HTTP ' request.status ')');
}
count ;
if (count > 2) {
jQuery('#social-bar').fadeIn(200);
}
};
// As Dvir Azulay correctly points out, you should execute the AJAX calls
// in the ready event
jQuery('.rss-count span').load('http://developer.dewereldverzamelaar.net/wp-content/themes/gridlocked/includes/update-rss.php', loadCallback);
jQuery('.twitter-count span').load('http://developer.dewereldverzamelaar.net/wp-content/themes/gridlocked/includes/update-twitter.php', loadCallback);
jQuery('.facebook-count span').load('http://developer.dewereldverzamelaar.net/wp-content/themes/gridlocked/includes/update-facebook.php', loadCallback);
/* again one other script the theme uses */
/* at the end this script closes the document.ready function closes */
Прямо сейчас страница все еще перезагружается до пустой. Когда я извлекаю свой код jQuery, все снова работает нормально. Я понятия не имею, что я мог бы сделать, чтобы заставить это работать.
Джонас
Оке, по какой-то причине он работает сейчас. Не знаю, что я изменил. Для людей, задающих один и тот же вопрос, это код jQuery, который работает, я не менял свой php и html-код, они были в порядке с самого начала:
/* Some Variables outside the document.ready function */
var count, loadCallback;
count = 0;
/*-----------------------------------------------------------------------------------*/
/* Let's get ready!
/*-----------------------------------------------------------------------------------*/
jQuery(document).ready(function() {
/*-----------------------------------------------------------------------------------*/
/* Social Count Script
/*-----------------------------------------------------------------------------------*/
loadCallback = function(response, status, request) {
// Since you use the same code in all the callbacks, you might as well
// only declare the function once. Since we're doing that, we might as
// well merge tz_showSocial into here as well...
if (request.status != 200) {
alert('Oh no! Something went wrong with the update! (HTTP ' request.status ')');
}
count ;
if (count > 2) {
jQuery('#social-bar').fadeIn(200);
}
};
// As Dvir Azulay correctly points out, you should execute the AJAX calls
// in the ready event
jQuery('.rss-count span').load('http://developer.dewereldverzamelaar.net/wp-content/themes/gridlocked/includes/update-feedburner.php', loadCallback);
jQuery('.twitter-count span').load('http://developer.dewereldverzamelaar.net/wp-content/themes/gridlocked/includes/update-twitter.php', loadCallback);
jQuery('.facebook-count span').load('http://developer.dewereldverzamelaar.net/wp-content/themes/gridlocked/includes/update-facebook.php', loadCallback);
/* Some other scripts go here, at the end the document.ready function is closed. */
Спасибо всем.
Джонас Сметс
Комментарии:
1. Где вы повторяете результаты с помощью php? Почему бы вам не повторить это непосредственно в соответствующие
<div>
s?2. Использование регулярных выражений в XML является основанием для смертной казни здесь, на SO. : P
Ответ №1:
Мне кажется, что вы выполняете код jQuery до полной загрузки DOM, и это может включать боковые панели.
Попробуйте поместить весь ваш код jQuery в $(document).ready(function(){ jquery code });
блок.
Ответ №2:
- Вы уверены, что эти URL-адреса верны (в коде JS)? Я не могу их загрузить…
- Страница, с которой вы пытаетесь запустить JS-код, также обслуживается
www.dewereldverzamelaar.com
? Потому что, если нет, это абсолютно не сработает из-за той же политики происхождения.
Я думаю, что лучшим способом выяснить, в чем проблема, было бы добавить некоторую обработку ошибок в вашу функцию обратного вызова. Это довольно просто, поскольку jQuery поможет передать объект XMLHttpRequest в обратный вызов в качестве третьего параметра.
Например, вот как я бы написал этот код…
var count, loadCallback;
count = 0;
loadCallback = function(response, status, request) {
// Since you use the same code in all the callbacks, you might as well
// only declare the function once. Since we're doing that, we might as
// well merge tz_showSocial into here as well...
if (request.status != 200) {
alert('Oh no! Something went wrong with the update! (HTTP ' request.status ')');
}
count ;
if (count > 2) {
jQuery('#social-bar').fadeIn(200);
}
};
// As Dvir Azulay correctly points out, you should execute the AJAX calls
// in the ready event
$(document).ready(function() {
$('.rss-count span').load('http://www.dewereldverzamelaar.com/wp-content/developer/themes/gridlocked/includes/update-rss.php', loadCallback);
$('.twitter-count span').load('http://www.dewereldverzamelaar.com/wp-content/developer/themes/gridlocked/includes/update-twitter.php', loadCallback);
$('.facebook-count span').load('http://www.dewereldverzamelaar.com/wp-content/developer/themes/gridlocked/includes/update-facebook.php', loadCallback);
});
Комментарии:
1. Привет, ребята, большое спасибо за ответ. Не знал ничего о той же политике происхождения. Я работаю над поддоменом разработки под названием developer.dewereldverzamelaar.net . Скрипты находятся на одном сервере. Может ли это быть проблемой? Сценарии jQuery, которые я написал, уже находятся в jQuery (документе). ready(function() { вместе с множеством других скриптов (которые являются частью моей темы WordPress, поэтому я их не писал) Так что это не может быть проблемой. DaveRandom, как бы выглядел ваш скрипт, если бы его не было в готовом документе?
2. Я отредактировал ссылки на файлы php, чтобы не использовать абсолютные ссылки, потому что это дало мне предложение «О, нет, что-то пошло не так». Прямо сейчас я не понимаю предложение. Страница начинает загружаться, я вижу свой контент, но чем он перезагружается на белую страницу? В чем здесь может быть проблема? Джонас
3. @JonasSmets Если вы отредактируете вопрос своим новым кодом, я с радостью посмотрю — трудно читать код в комментариях…
4. Привет, Дэйв, извини, я новичок в stack overflow. Я обновил свой первый пост.
5. На данный момент не уверен, почему страница перезагружается с пустой страницей (это предполагает
document.write('');
, что вызывается или где-то происходит перенаправление), но вы должны переместить весь код, кроме вызовов ajax (jQuery('.rss-count span').load(...);
и т.д.), За пределы.ready
функции. Это потому, что вам нужно, чтобы созданные объекты существовали в области более высокого уровня, чем.ready
функция, потому что HTTP-запросы являются синхронными… Если вам нужно дополнительное объяснение этого, спросите, и я сделаю все возможное…