jQuery .load не получает переменную filepath - PullRequest
0 голосов
/ 21 марта 2011

Итак, у меня есть собственный модуль Drupal, который выводит отформатированную версию данных узла песни на основе идентификатора узла в пути (load / song / NID). Эта функция работает нормально, и когда я смотрю на URL в своем браузере, я вижу, что все загрузилось отлично.

Код моего модуля:

function load_song($nid){
$node = node_load($nid);
$songname = $node->title;

$albumid = $node->field_album['und'][0]['nid'];
$album = node_load($albumid);
$file = $album->field_cover['und'][0];

//Loads the album filepath from the file array returned above
$filepath = $file['uri'];

//The path returned is something like "public://file.jpg"
$filepath = str_replace("public://", "http://mysite.com/sites/default/files/styles/thumbnail/public/", $filepath);

//I then set a variable (imgurl) to the formatted filepath
$imgurl = $filepath;

$artistid = $album->field_artist['und'][0]['nid'];
$artist = node_load($artistid);
$artistname = $artist->title;

echo 'I output the variables + formatting here';
}

Получив выходные данные, я загружаю их в свой файл page.tpl.php в Drupal с помощью функции jQuery .load. Мой код:

function loadSongInfo(id) {
$("#current-song").html('Loading').load('http://mysite.com/load/song/' + id); 
}

Итак, с этим вводом я получаю данные из URL (который отлично отформатирован), и другие переменные, которые я загружаю (имя исполнителя, название песни и т. Д.), Работают нормально. Однако там, где у меня есть путь к файлу, все, что я получаю, это пустая строка.

Это, конечно, меня смущает, потому что в моем браузере он работает нормально, но когда я вызываю функцию в jQuery, она прекрасно загружает все остальные переменные, кроме пути к файлу.

Я пытался (и получил неудачные результаты):

  • Преобразование переменной $ filepath в строку с использованием трех различных методов
  • (я подумал, что это может быть что-то странное с URL). Я заменил переменную filepath только статической строкой ("http://mysite.com/sites/default/files/styles/thumbnail/public/file.jpg"),, которая вернула правильный результат, но все еще не работает с фактической переменной
  • var_dump
  • print_r

Кто-нибудь знает, почему это не работает?

1 Ответ

0 голосов
/ 21 марта 2011

MyModule

function mymodule_menu(){
  $items = array();
  $items['js/song'] = array(
      'page callback' => 'load_song',
      'type' => MENU_CALLBACK,
      'access arguments' => array('access content')
  );
}

function load_song() {
  $nid = $_POST['nid'];
  $node = node_load($nid);

  /*
   * Check for node existing
   * Return response.error if not loaded
   */
  if(!$node->nid){
    drupal_json(array('error' => t('Some text for error')));
    die();
  }

  $songtitle = $node->title;

  $albumid = $node->field_album['und'][0]['nid'];
  $album = node_load($albumid);
  $file = $album->field_cover['und'][0];

  // Loads the album filepath from the file array returned above
  $filepath = $file['uri'];

  // The path returned is something like "public://file.jpg"
  $filepath = str_replace("public://", "http://mysite.com/sites/default/files/styles/thumbnail/public/", $filepath);

  // I then set a variable (imgurl) to the formatted filepath
  $imagepath = $filepath;

  $artistid = $album->field_artist['und'][0]['nid'];
  $artist = node_load($artistid);
  $artistname = $artist->title;

  $object = array(
      'song_title' => l($songtitle, 'node/'. $node->nid),
      'image_path' => $imagepath,
      'artist_name' => l($artistname, $artist->nid)
  );
  drupal_json(array('data' => $object));
  die();
}

Javascript:

Drupal.behaviors.SongInit = function(context){
  $("#current-song").html('Loading...').load("/load/song", {
    nid : id
  }, function(response, status, xhr) {
    if (status == 'error') {
      var msg = Drupal.t("Sorry but there was an error: ");
      $("#current-song").html(msg + xhr.status + " " + xhr.statusText);
    }
    if (response.error) {
      var msg = Drupal.t("Sorry but there was an error: ");
      $("#current-song").html(msg);
    }
    else {
      var msg = response.data.song_title + '<br />';
      var msg = '<img src=/"' + response.data.image_path + ' /><br />';
      var msg = response.data.artist_name + '<br />';
      $("#current-song").html(msg);
      Drupal.attachBehaviors(context);
    }
  });
}
...