2009-10-20 6 views
0

Alors j'essaie de mettre en œuvre la solution qui m'a été suggérée dans ma question précédente (SharePoint SOAP GetListItems VS jQuery - Need some advice on how to use Ajax to cycle through Custom List items as well as Ajax refresh the list contents). Je veux utiliser la bibliothèque Cycle trouvée ici: http://malsup.com/jquery/cycle2/ pour faire défiler le contenu d'un DIV que je remplis avec des lignes d'une liste SharePoint personnalisée. Le html Je crée semble valide, mais lorsque je tente d'exécuter le code de cycle ci-dessous je reçois:jQuery ".cycle n'est pas une fonction" erreur - suivi de http://stackoverflow.com/questions/1586998/

Error: $("#tasksUL").cycle is not a function 
Source File: http://ourdomain.net/Pages/Default.aspx 
Line: 426 

Voici le code que je suis bloqué dans une partie Web Content Editor:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript" src="/SiteCollectionDocuments/jquery.timers-1.0.0.js"></script> 
<script type="text/javascript" src="/SiteCollectionDocuments/jquery.cycle.all.2.72.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() { 

// Create the SOAP request   
// NOTE: we need to be able to display list attachments to users, hence the addition of the 
// <queryOptions> element, which necessitated the addition of the <query> element 

var soapEnv = 
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Body><GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>testlist</listName><viewFields><ViewFields><FieldRef Name='Title' /><FieldRef Name='Body' /><FieldRef Name='ID' /><FieldRef Name='Attachments' /></ViewFields> </viewFields><query><Query /></query><queryOptions><QueryOptions><IncludeAttachmentUrls>TRUE</IncludeAttachmentUrls></QueryOptions></queryOptions></GetListItems></soapenv:Body></soapenv:Envelope>"; 

// call this SOAP request every 20 seconds 
$("#tasksUL").everyTime(20000,function(i){ 
    // our basic SOAP code to hammer the Lists web service 
    $.ajax({ 
    url: "http://ourdomain.net/_vti_bin/lists.asmx", 
    type: "POST", 
    dataType: "xml", 
    data: soapEnv, 
    error: printError, 
    complete: processResult, 
    contentType: "text/xml; charset=\"utf-8\"" 
    }); 
    }); 
}); 

// basic error display that will pop out SOAP errors, very useful! 
function printError(XMLHttpRequest, textStatus, errorThrown) 
{ 
    alert("There was an error: " + errorThrown + " " + textStatus); 
    alert(XMLHttpRequest.responseText); 
} 

// main method that will cycle through the SoAP response nodes 
function processResult(xData, status) 
{ 
    var liHtml = ""; 
    $(xData.responseXML).find("z\\:row").each(function() 
    { 
    // resets display element 
    $("#tasksUL").empty(); 

    // gets attachments array - if there is more than one attachment, 
    // they get seperated by semi-colons in the response 
    // they look like this natively (just an example): 
    // ows_Attachments = ";#http://server/Lists/Announcements/Attachments/2/test.txt; 
    // #http://server/Lists/Announcements/Attachments/2/UIP_Setup.log;#" 

     var mySplitResult = $(this).attr("ows_Attachments").split(";"); 
    // set up storage for later display of images 
    var notice_images = ""; 

    // processes attachments - please forgive the kludge! 
    for(i = 0; i < mySplitResult.length; i++) 
    { 
     // check to see the proper link URL gets chosen 
     if (i % 2 != 0 && i != 0) 
     { 
      // strips out pound sign 
      mySplitResult[i] = mySplitResult[i].replace("#", ""); 

      // (possibly redundant) check to make sure element isn't simply a pound sign 
      if (mySplitResult[i] != "#") 
      { 
       // adds an img tag to an output container 
       notice_images = notice_images + "<img src='" + mySplitResult[i] + "' border='0' align='right' style='float:right;' /><br />"; 
      } 
     } 
    } 

    // create final output for printing 
    liHtml = liHtml + "<div><h3>" + $(this).attr("ows_Title") + "</h3><p>" + notice_images + $(this).attr("ows_Body") + "</p></div>"; 
    }); 

    // assign output to DIV tags 
    $("#tasksUL").html(liHtml); 
} 
</script> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#tasksUL').cycle({ 
     fx: 'fade' // choose your transition type, ex: fade, scrollUp, shuffle, etc... 
    }); 
}); 
</script> 

<div id="tasksUL">&nbsp;</div> 

Le code se déclenche comme prévu, mais je me demande ce que je fais de mal en ce qui concerne la fonction Cycle ... J'ai essayé de lier explicitement à tous les fichiers JavaScript dans les inclusions que j'ai ci-dessus, et je peux les atteindre dans un navigateur pas de problèmes. Pour utiliser correctement cette bibliothèque, dois-je définir CSS pour #tasksUL? Y a-t-il quelque chose d'évident dans le code que j'ai besoin de frapper au visage? Merci!

+0

Etes-vous sûr que le plug-in Cycle (http://malsup.com/jquery/cycle/) est chargé? – NawaMan

+0

Absolument! La troisième ligne de JS dans le code ci-dessus est une inclusion qui fonctionne vraiment bien ... y at-il d'autres fichiers dont j'ai besoin? –

Répondre

1

En fait, et personne ne pouvait le savoir, la raison de cet échec était que quelqu'un avait installé un paquet jQuery de collection de sites qui était ancien et ne l'avait pas Je travaille très bien avec jCycle. Une fois que j'ai désactivé cette fonctionnalité sur la collection, j'ai redémarré IIS et actualisé la page, tout a bien fonctionné. Comme une étape supplémentaire, j'ai téléchargé la dernière version complète de jQuery dans une bibliothèque de documents et lié à la place de la version hébergée par Google du script. Donc, tous les js que j'utilise vivent dans la collection de sites maintenant.

J'ai été capable de comprendre les versions conflictuelles de jQuery mais en utilisant la console et le débogueur Script de Firebug. J'ai dû définir le débogueur pour arrêter toutes les erreurs, mais la toute première erreur qui s'est produite était de référencer le paquet jQuery de la collection de sites et non mon code Google inclus. C'est la raison pour laquelle je réponds à ma propre question. Il y a d'autres bâtards pauvres qui font du développement de SharePoint et il ne leur viendrait pas à l'idée d'utiliser FireFox pour tester leurs installations de SP, à quel point cela favorise IE et tout le reste.

Merci à tous ceux qui ont lu et répondu/commenté!

1

D'où avez-vous obtenu le fichier jquery.cycle ... js?

Au moins le fichier zip du jQuery Cycle Plugin homepage semble avoir des caractères supplémentaires étranges à la fin du nom de fichier. Lorsque je l'ai déballé, mon fichier s'appelle jquery.cycle.all.min.js_ au lieu de jquery.cycle.all.min.js

+0

J'ai fini par arracher le fichier de l'adresse utilisée dans le fichier example.html qui se trouve dans cette même archive, car mon client WinRAR n'a pas pu décompresser correctement certains des fichiers js dans l'archive que j'ai téléchargée de l'adresse ci-dessus. Le fichier example.html semble fonctionner très bien, alors j'ai pensé que si je téléchargeais le fichier JS utilisé, je serais tout bon. Je me demande maintenant, est-il possible que cela échoue parce que mon conteneur DIV commence à ne rien avoir dedans? Il ne se remplit pas avant que 20 secondes se soient écoulées. Aussi, si j'utilise la méthode .html pour peupler mon DIV, cela détruit-il réellement la DIV? –