2012-08-13 56 views
0

我在这里第一次求救。 不知道我的标题是否正确显式,但是这是我现在可以提出的唯一标题。我已经读了两天了,我读了很多不同的东西,我觉得我已经完全搞不清楚了。我会尽量做到尽可能精确。 这里是我的问题,在JQUERY中通过AJAX从PHP创建关联数组

首先,这是jQuery的代码,我在此基础:

$thumbnails.find('a').each(function() { 
     pictures.push({ 
      src: $(this).attr('href'),  
      title: $(this).find('img').attr('title'), 
      valign: $(this).find('img').data('valign') 
     }); 
    }) 

你在那里注意到pictures.push。 现在,这正好与,

$.vegas('slideshow', { 
     backgrounds: pictures, 
     delay: 4000, 
     fade:5000 
    })('overlay'); 

注意如何背景属性使用图片得到它所需要的图像的名字。我不确定现在如何拨打图片。它是一个关联数组还是它是一个对象?

无论如何,我不想从HTML节点获取图像的文件名。我正在使用PHP获取服务器上目录中的文件名,并使用这些文件名生成XML文档。 这里是产生在我的PHP脚本的XML文件,(我只需要5张图片为我的需要)

header("Content-type: text/xml"); 
    echo '<?xml version="1.0"?>'; 
    echo "<img>"; 
    for($i=0;$i<5;$i++){ 
     echo "<src>img/" . $rep_aleatoire[$i] . "/" . $img_aleatoire[$i] . "</src>"; 
     echo "<title>" . $img_aleatoire[$i] . "</title>"; 
    } 
    echo "</img>"; 

的一部分,这是THES的XML文档的样子,

<img> 
<src>img/portraits/DSC_0161.jpg</src> 
<title>DSC_0161.jpg</title> 
<src>img/nature/DSC_0019 copy-tych 3.jpg</src> 
<title>DSC_0019 copy-tych 3.jpg</title> 
<src>img/portraits/DSC_0157.jpg</src> 
<title>DSC_0157.jpg</title> 
<src>img/editions/DSC_0053.jpg</src> 
<title>DSC_0053.jpg</title> 
<src>img/editions/DSC_Ant.jpg</src> 
<title>DSC_Ant.jpg</title> 
</img> 

而且这里是jQuery的一部分,我用它来获取XML数据,

$.get("main.php", function(data){ 
     var rep = new Array; 
     var file = new Array; 
     $(data).find("img").each(function(){ 
      $(this).find('src').each(function(i){ 
       rep[i] = $(this).text(); 
      }); 
      $(this).find('title').each(function(i){ 
       file[i] = $(this).text(); 
      });; 
      for(i=0;i<rep.length;i++){ 
       pictures.push({ 
        src: $(rep[i]),  
        title: $(file[i]) 
       }); 
      } 
     }); 
}); 

图片已经被初始化了这个有趣的范围因此它应该在我需要的任何地方可用,但事实并非如此。如果我试图在该函数之外访问它,它是空的。 另外,当它在该函数的范围内时,它所包含的全部是对象。我甚至不知道我是否按照正确的方式去做。我尝试了许多不同的方式,我甚至不记得。我无法获得XML文档中生成的实际数据。

我当然希望我已经足够清楚,并且你们明白我的所作所为。 我只是想生成图片的适当格式所以它是可用的$ vegas函数。

任何帮助将不胜感激。

回答

0

首先。总是声明你的变量。

错误声明:

var rep = new Array; 
var file = new Array; 

应该是

var rep = new Array(); 
var file = new Array(); 

甚至更​​好:

var rep = []; 
var file = []; 

声明i,您使用的最后一个循环。

for(var i=0;i<rep.length;i++){ 
... 

甚至更​​好:

var i; 
for(var i=0;i<rep.length;i++){ 
.. 

当你做完这些后,你会发现,你试图通过您的数组值访问的jQuery对象。

pictures.push({ 
    src: $(rep[i]),  
    title: $(file[i]) 
}); 

而且你可能是指:

pictures.push({ 
    src: rep[i], 
    title: rep[i] 
}); 

当然,确保var pictures适用于所有领域,在那里你正在使用它。

+0

感谢您的快速回答。正如我所提到的,我关注这个问题有很多不同的东西,我再也看不到了。你说得对,数组声明是错误的。我甚至没有看到。但我应该知道。我将应用您的修复并让您知道。 – TTC1 2012-08-13 03:21:13

+0

嗯,我修正了所有变量的声明并确保了var pictures = [];在一般范围内。不过,我无法在$ .get范围之外访问此var。我完全被这一个困惑。 – TTC1 2012-08-13 03:55:53

+0

嗯,虽然我真的不确定它为什么会这样,但将** $ vegas **调用放在** $。get **范围内解决了我的问题。尽管** var pictures []; **在** $。get **作用域之外被声明,但它仍然不能被修改并导出到** $。get **作用域之外。无论如何,感谢@Nagh的帮助。 – TTC1 2012-08-13 05:33:15