mootools vs AJAX (conflict?)

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
AresGR
Δημοσιεύσεις: 4
Εγγραφή: 02 Απρ 2011 14:28

mootools vs AJAX (conflict?)

Δημοσίευση από AresGR » 02 Απρ 2011 15:58

Έχω ένα πρόβλημα σχετικά με μία υλοποίηση του κώδικά μου το οποίο εμφανίζεται μόνο σε ie (πιο συγκεκριμένα στον ie8, για τις υπόλοιπες versions δεν το έχω ελέγξει ακόμα)... Στους Mozilla (v4) και chrome (v10), δεν έχω κανένα απολύτως πρόβλημα... Σκοπός μου είναι να χρησιμοποιήσω την standalone version του rokbox plugin, το οποίο χρησιμοποιεί την mootools-release-1.11.js library... Η χρήση του rokbox είναι επιτακτική για την υλοποίηση μου και δεν αφορά μόνο το εμφανησιακό κομμάτι...

Θα προσπαθήσω να γίνω όσο πιο συγκεκριμένος μπορώ σχετικά με το πρόβλημα...

Έχω ένα αρχείο index.php το οποίο περιλαμβάνει τις παρακάτω βιβλιοθήκες στο header section του (προσοχή: κάποιες είναι commented):

Κώδικας: Επιλογή όλων

<head>
<script type="text/javascript" src="../rokbox/mootools-release-1.11.js"></script>
<!--<script type="text/javascript" src="../rokbox/mootools-core-1.3.1-full-compat.js"></script>-->
<!--<script type="text/javascript" src="../rokbox/mootools-1.2.5-core-nc.js"></script>-->
<script type="text/javascript" src="../rokbox/rokbox.js"></script>
<link href="../rokbox/themes/mynxx/rokbox-style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../rokbox/themes/mynxx/rokbox-config.js"></script>
<!--<script type="text/javascript">jQuery.noConflict&#40;&#41;;</script>-->

<script type="text/javascript" src="myscript.js"></script>
<script type="text/javascript" src="allfields.js"></script>
<link rel="stylesheet" type="text/css" href="styling.css"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Advanced Search</title>
</head>
Σε κάποιο σημείο του κωδικά μου στο myscript.js χρησιμοποιώ AJAX για να καλέσω ένα αρχείο .php το οποίο κάνει echo στο index.php τα αποτελέσματα αναζητήσεων στην βάση μου... Το κομμάτι του κώδικα στην myscript.js είναι αυτο:

Κώδικας: Επιλογή όλων

var xmlhttp=new Array&#40;&#41;;

function AJAX&#40;i,query&#41;&#123;
	/* Establish AJAX connection */
	if &#40;window.XMLHttpRequest&#41;
  	&#123;// code for IE7+, Firefox, Chrome, Opera, Safari
		&#91;b&#93;try&#123;&#91;/b&#93;
  		xmlhttp&#91;i&#93;=new XMLHttpRequest&#40;&#41;;
		&#91;b&#93;&#125;catch&#40;err&#41;&#123; alert&#40;"ERROR IN AJAX&#91;"+i+"&#93;&#58; "+err&#41;&#125;&#91;/b&#93;
  	&#125;
	else
  	&#123;// code for IE6, IE5
  		xmlhttp&#91;i&#93;=new ActiveXObject&#40;"Microsoft.XMLHTTP"&#41;;
  	&#125;
  	xmlhttp&#91;i&#93;.onreadystatechange=function&#40;&#41;               // Line 21
  	&#123;
  		if &#40;xmlhttp&#91;i&#93;.readyState==4 && xmlhttp&#91;i&#93;.status==200&#41;
    	&#123;
    		document.getElementById&#40;"opt"+i&#41;.innerHTML=xmlhttp&#91;i&#93;.responseText;
			if&#40;i==-1&#41; mybox&#40;&#41;;
    	&#125;
  	&#125;
	/* Send data to php file */
//	alert&#40;"Field&#58; "+obj&#91;i&#93;.field+" \n Query&#58; "+query&#41;;
	if&#40;i!=-1&#41;&#123;
		xmlhttp&#91;i&#93;.open&#40;"POST","values.php",true&#41;;
		xmlhttp&#91;i&#93;.setRequestHeader&#40;'Content-Type', 'application/x-www-form-urlencoded'&#41;;
		xmlhttp&#91;i&#93;.send&#40;'query='+query+'&field='+obj&#91;i&#93;.field+'&i='+i&#41;;
	&#125;else&#123;
		xmlhttp&#91;i&#93;.open&#40;"POST","../results.php",true&#41;;
		xmlhttp&#91;i&#93;.setRequestHeader&#40;'Content-Type', 'application/x-www-form-urlencoded'&#41;;
		xmlhttp&#91;i&#93;.send&#40;'query='+query&#41;;
	&#125;
	
&#125;
Το rokbox αναγνωρίζει τα <a href=""> που υπάρχουν στο index.php ώστε να εμφανίζει σε pop-up το url, με την χρήση του rel="rokbox" μέσα στο tag. Κάθε φορά που θέλω να πέρνει και καινούρια links που επιστρεφονται με rel καλώ την function mybox()...

Τώρα το πρόβλημα:

Όταν ανοίγω την σελίδα από τον ie η try-catch που χρησιμοποιώ μεσα στην function AJAX επιστρέφει το alert: "ERROR IN AJAX[0]: TypeError: Object doesn't support this property or method"... Μόλις επιλέξω ok ο υπόλοιπος κώδικας δεν θα τρέξει. Στην συνέχεια κάνοντας refresh την σελίδα θα τρέξει όλος ο κώδικας χωρίς κανένα απολύτως πρόβλημα.. Το error το παίρνω μόνο στο άνοιγμα της σελίδας σε νέο παράθυρο (και μετά απο πολλές φορές με καθάρισμα του cache)... Ο ίδιος ο ie μου δίνει το error:

Κώδικας: Επιλογή όλων

Webpage error details

User Agent&#58; Mozilla/4.0 &#40;compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C&#41;
Timestamp&#58; Sat, 2 Apr 2011 12&#58;34&#58;07 UTC


Message&#58; 'xmlhttp&#91;...&#93;' is null or not an object
Line&#58; 21
Char&#58; 4
Code&#58; 0
URI&#58; http&#58;//.............../ares/project%20testing/advanced/myscript.js
(την line 21 την έχω μαρκάρει με comment στον κώδικα του myscript.js)

"Googlάροντας" αρκετά διάβασα ότι η mootools (που χρησιμοποιεί το $ για να δηλώσει οτι ακολουθεί εντολή), έχει conflict με άλλες libraries που χρησιμοποιούν το $ για κάποιες μεταβλητές... Συγκεκριμένα είδα ότι η Jquery χρησιμοποιεί επίσης το $ και οτι το conflict μπορεί να λυθεί με την jquery.noConflict() , το οποίο προσπάθησα (όπως φαίνεται απο το head section του index.php σε comment) να το χρησιμοποιήσω αλλά δεν γνωρίζω πως ακριβώς... Επίσης δεν χρησιμοποιώ την jQuery library oπότε δεν βγάζω νόημα... Επίσης από το site της mootools διάβασα ότι οι νεότερες versions της λύνουν το conflict problem, και προσπάθησα να κανω αυτές include (όπως επίσης φαίνεται από τα comments), αλλά το rokbox δεν δουλεύει με αυτές τις libraries...

Θα εκτιμούσα οποιαδήποτε βοήθεια από οποιονδήποτε γνωρίζει πως να λύσω το θέμα αυτό... Ευχαριστώ προκαταβολικά...

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6236
Εγγραφή: 30 Νοέμ 2004 03:09

mootools vs AJAX (conflict?)

Δημοσίευση από fafos » 02 Απρ 2011 19:28

to jQuery.noConflict() einai gia xrhsh jquery + kapoia allh ajax vivliothikh.. den xreiazetai..

tsekare oti den trexeis 2 fores sthn idia selida to mootools.js..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
AresGR
Δημοσιεύσεις: 4
Εγγραφή: 02 Απρ 2011 14:28

mootools vs AJAX (conflict?)

Δημοσίευση από AresGR » 02 Απρ 2011 19:57

Το mootools το τρέχω μόνο στην αρχή μέσα από το head section... Οι υπόλοιπες versions είναι σε comment... Μέσα στον υπόλοιπο κώδικά μου δεν ξανατρέχω το mootools... To μοναδικό που θα μπορούσε να καλέσει το mootools είναι η function mybox() (απο το rokbox) που καλείται οταν ειναι ready το dom και μετα την ξανακαλώ εδω:

Κώδικας: Επιλογή όλων

xmlhttp&#91;i&#93;.onreadystatechange=function&#40;&#41;
  	&#123;alert&#40;"check"&#41;;
  		if &#40;xmlhttp&#91;i&#93;.readyState==4 && xmlhttp&#91;i&#93;.status==200&#41;
    	&#123;
    		document.getElementById&#40;"opt"+i&#41;.innerHTML=xmlhttp&#91;i&#93;.responseText;
			if&#40;i==-1&#41; mybox&#40;&#41;;                      //HERE!!!
    	&#125;
  	&#125;
Αυτό ομως δεν μπορεί να δημιουργεί το πρόβλημα καθώς το alert("check") δεν τρέχει ποτέ γιατί ήδη έχει σταματήσει ο κώδικας στην xmlhttp.onreadystatechange... Και ακόμα και όταν την κάνω comment δεν αλλάζει κάτι...

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6236
Εγγραφή: 30 Νοέμ 2004 03:09

mootools vs AJAX (conflict?)

Δημοσίευση από fafos » 02 Απρ 2011 20:37

se mia dokimh mou (me to mootools apo to rockettheme) mou petaei error afou kano click sthn eikona kai meta (to idio error petaei kai to demo sto rockettheme).. me neotero mootools (dokimasa to 1.2.5) mou petaei ena error to rokbox.js.. ekana dokimes afairontas - prosthentotas ton epipleon kodika ajax kodika pou exeis xoris kammia diafora..

mallon einai provlhma tou rokbox..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
AresGR
Δημοσιεύσεις: 4
Εγγραφή: 02 Απρ 2011 14:28

mootools vs AJAX (conflict?)

Δημοσίευση από AresGR » 03 Απρ 2011 00:31

Καταρχάς να σε ευχαριστήσω που ασχολείσαι με το θέμα...

Αυτό που είπες μου κίνησε την περιέργεια, και μπήκα στο demo του rokbox ώστε να το δοκιμάσω και με τους τρεις browsers (ie, firefox, chrome)... Δεν έβγαλε πουθενά κάποιο error (ούτε στον ie)...

Για να μπορέσεις να δεις το πρόβλημα μπορείς να μπεις σε αυτό το link... Μπορείς να το τσεκάρεις με mozilla ή chrome και υπο κανονικές συνθήκες θα δεις οτι τρέχει ολόσωστα (μετά απο κάποια επιλογή θα σου εμφανιστούν και τα αποτελέσματα τα οποία ανοίγουν με το rokbox)... Ενώ μόλις το τρέξεις με internet explorer θα δεις το error και στην συνέχεια θα "παγώσει" (μεχρι να κάνεις refresh οπου και θα τρέξει και αυτό κανονικά)...

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης