Проблема с Jquery qtip ajax

#php #jquery #ajax #post #get

#php #jquery #ajax #Публикация #получить

Вопрос:

Я пытаюсь опубликовать значение поля ввода (в данном случае ссылку imdb) в моем imdbgrabber.php откройте страницу и попросите ее вернуть информацию об этом фильме в поле qtip.

РЕДАКТИРОВАТЬ: посмотреть здесь http://movieo.no-ip.org Наведите курсор на изображения, и вы увидите ошибку.

Все работает нормально, пока я не попытаюсь опубликовать переменную на странице imdbgrabber. Это код.

Javascript:

  var link = $("#link").val();
    var imdbLink = 'link='  link;

$(".moviebox").qtip({
   style: { name: 'cream' },
   content: {
     method: 'GET',
     data: imdbLink,
     url: '/includes/imdbgrabber.php',
     text: '<img class="throbber" src="/images/loading.gif" alt="Loading..." />'
   },
   position: {
         corner: {
           target: 'bottomright',
          tooltip: 'bottomleft'
        }
      }
});
  

HTML:

  <!--start moviebox-->
  <div class="moviebox">
  <a href="#">
  <img src="http://1.bp.blogspot.com/_mySxtRcQIag/S6deHcoChaI/AAAAAAAAObc/Z1Xg3aB_wkU/s200/rising_sun.jpg" />
  <form method="get" action="">
              <input type="text" name="link" id="link" style="display:none" value="http://www.imdb.com/title/tt0367882"/>
 </form>
  </a>
  </div>
  <!--end moviebox-->
  

и, наконец, php:

 <?php

$url=$_GET['link'];

//$url = 'http://www.imdb.com/title/tt0367882/';

//get the page content
$imdb_content = get_data($url);

//parse for product name
$name = get_match('/<title>(.*)</title>/isU',$imdb_content);
$director = strip_tags(get_match('/<h5[^>]*>Director:</h5>(.*)</div>/isU',$imdb_content));
$plot = get_match('/<h5[^>]*>Plot:</h5>(.*)</div>/isU',$imdb_content);
$release_date = get_match('/<h5[^>]*>Release Date:</h5>(.*)</div>/isU',$imdb_content);
$mpaa = get_match('/<a href="/mpaa">MPAA</a>:</h5>(.*)</div>/isU',$imdb_content);
$run_time = get_match('/Runtime:</h5>(.*)</div>/isU',$imdb_content);
$rating = get_match('/<div class="starbar-meta">(.*)</div>/isU',$imdb_content);

////build content
//$content = '<h2>Film</h2><p>'.$name.'</p>'
//          . '<h2>Director</h2><p>'.$director.'</p>'
//          . '<h2>Plot</h2><p>'.substr($plot,0,strpos($plot,'<a')).'</p>'
//          . '<h2>Release Date</h2><p>'.substr($release_date,0,strpos($release_date,'<a')).'</p>'
//          . '<h2>MPAA</h2><p>'.$mpaa.'</p>'
//          . '<h2>Run Time</h2><p>'.$run_time.'</p>'
//          . '<h2>Full Details</h2><p><a href="'.$url.'" rel="nofollow">'.$url.'</a></p>';



//gets the match content
function get_match($regex,$content)
{
    preg_match($regex,$content,$matches);
    return $matches[1];
}

//gets the data from a URL
function get_data($url)
{
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
?>

  <!--start infobox-->
    <div class="info"> 
  <span>
  <?php echo '<strong>'.$name.'</strong>' ?>
  </span>

  <img src="http://1.bp.blogspot.com/_mySxtRcQIag/S6deHcoChaI/AAAAAAAAObc/Z1Xg3aB_wkU/s200/rising_sun.jpg" /> 
  <div class="plot">
  <?php echo ''.substr($plot,0,strpos($plot,'<a')).'</div>' ?>
  </div>

  <div class="runtime">
  <?php echo'<strong>Run Time</strong><br />'.$run_time.'</div>' ?>
  </div>
<div class="releasedate">
<?php echo '<strong>Release Date</strong><br />'.substr($release_date,0,strpos($release_date,'<a')).'</div>' ?>
</div>
<div class="director">
<?php echo '<strong>Director</strong><br />'.$director.'' ?>
</div>
  <div class="rating">
  <?php echo '<strong>Rating</strong><br />'.$rating.'' ?>
  </div>
  </div>
  <!--end infobox-->
  

Я уверен, что где-то это простая ошибка, но после нескольких часов поиска я подумал, что спрошу экспертов.

Ответ №1:

Согласно документации, данные для qtip при выборке через AJAX должны представлять собой пары ключ-значение. Попробуйте это:

 var link = $("#link").val();
var imdbLink =  { "link" : link };  // note change to data...

$(".moviebox").qtip({
   style: { name: 'cream' },
   content: {
     method: 'GET',
     data: imdbLink,   // you could make this { "link" : link }
     url: '/includes/imdbgrabber.php',
     text: '<img class="throbber" src="/images/loading.gif" alt="Loading..." />'
   },
   position: {
         corner: {
           target: 'bottomright',
          tooltip: 'bottomleft'
        }
      }
});
  

Также похоже, что ваша процедура get_match неправильно индексирует массив matches. Массивы основаны на нуле, поэтому первое совпадение — это совпадение с индексом 0, а не с единицей. Фактически, у вас может быть только одно совпадение с учетом ваших регулярных выражений, поскольку у вас есть только одно группирующее выражение.

Попробуйте изменить его на это:

 //gets the match content  
function get_match($regex,$content)  
{  
    preg_match($regex,$content,$matches);  
    return $matches[0];
}
  

Комментарии:

1. Все та же проблема, проверьте здесь: movieo.no-ip.org . Наведите курсор на изображения, посмотрите, что произойдет

2. Я понимаю. Проблема была не в запросе, а в вашем коде. Будет обновляться.

3. Исправлена та же проблема. Ajax нормально отправляет информацию, так что где-то проблема с php

4. По крайней мере, вы больше не получаете ошибку PHP, поэтому проблема с индексацией решена. Проблема сейчас, похоже, в том, что данные отображаются некорректно, не так ли?

5. Вы, конечно, понимаете, что получение данных из IMDB в коммерческих целях без заключения с ними лицензионного соглашения незаконно, не так ли?