John,

Well figures .. it is my code. .html() certainly does the trick. I
wasn't aware that replaceWith removes stuff from the DOM indefinitely.

Ahhhh, thanks for saving me from hours of troubleshooting. I really
really appreciate it.

- sf

On 9/24/07, John Resig <[EMAIL PROTECTED]> wrote:
>
> Are you meaning to do .html(..) instead of replaceWith? replaceWith
> completely removes the element (which means that when it's called the
> second time, nothing happens, since the element no longer exists).
>
>  Whereas .html() simply replaces the contents of the element.
>
> --John
>
> On 9/24/07, Steve Finkelstein <[EMAIL PROTECTED]> wrote:
> >
> > This is actually happening in IE7 also. Is it possible that something
> > is hosed with my code? I'm more confident it's that than a broken
> > replaceWith() but I'd really like to know why it only works once, and
> > then I need a page refresh for that "ajax" effect.
> >
> > - sf
> >
> > On 9/24/07, Steve Finkelstein <[EMAIL PROTECTED]> wrote:
> > > Hi all,
> > >
> > > So I have a simple script which essentially uses .replaceWith() to
> > > replace the containing elements HTML with a success callback. This
> > > works fine the first time I invoke a function which calls
> > > .replaceWith() in the success call back, but any subsequent calls
> > > leaves the DOM unmodified.
> > >
> > > Here's an example screenshot of what my page looks like upon a random 
> > > page load.
> > >
> > > http://catalyst.httpd.org/tmp/1.png
> > >
> > > Ok so I have 4 notes. Let's delete one:
> > >
> > > http://catalyst.httpd.org/tmp/2.png
> > >
> > > Perfect, it's gone:
> > >
> > > http://catalyst.httpd.org/tmp/3.png
> > >
> > > Here's where the problem occurs... Let's delete another
> > >
> > > http://catalyst.httpd.org/tmp/4.png
> > >
> > > Hmmm, it didn't disappear from the DOM this time:
> > >
> > > http://catalyst.httpd.org/tmp/5.png
> > >
> > > The OB/GYN note is still there as rendered by the browser, however the
> > > server-side script surely wiped it:
> > >
> > > mysql> select id,name from ms_notes where id="CN";
> > > Empty set (0.00 sec)
> > >
> > > Here's what my code looks like to remove the note:
> > >
> > > function removeNote(id,name) {
> > >         if(confirm("Are you sure you wish to delete: "+name+"?")) {
> > >                 // ajax code here to remove note.
> > >                 $.ajax({
> > >                   url: "/dbserver.php",
> > >                   type: "POST",
> > >                   data: "delete="+id,
> > >                   cache: false,
> > >                   success: function(html) {
> > >                         $("#alpha_notes").empty();
> > >                     $("#alpha_notes").replaceWith(html);
> > >                   }
> > >                 });
> > >         }
> > > }
> > >
> > > Very important thing to factor in, is if I do a hard refresh on the
> > > page, here are the results... a missing OB/GYN note, which is the way
> > > it should be:
> > >
> > > http://catalyst.httpd.org/tmp/6.png
> > >
> > > Any idea folks? Would really appreciate any help. Firebug also shows
> > > that in its response to my POST call that the notes are not there in
> > > its table rendering. My server-side code looks like this:
> > >
> > > if($_POST['delete']) {
> > >         global $db_alpha, $link;
> > >         $alpha_note_set = array();
> > >         $db = mysql_select_db($db_alpha, $link);
> > >     if(!$db) {
> > >         die("Can't connect to alpha, please contact steve.");
> > >     }
> > >
> > >     $sql = "DELETE from ms_notes
> > >                         WHERE ID='".$_POST['delete']
> > >                 ."' LIMIT 1";
> > >         $result='';
> > >     $result = mysql_query("$sql");
> > >         if(!$result) { die("Something is broken... "); }
> > >
> > >         $sql = "SELECT NAME,ID from ms_notes";
> > >     $alpha_result_set = @mysql_query("$sql");
> > >     $row='';
> > >     if(mysql_num_rows($alpha_result_set)==0) { $html = "There are zero
> > > notes left to process in Alpha's database"; echo $html; exit; }
> > >         while($row = @mysql_fetch_array($alpha_result_set, MYSQL_ASSOC)) {
> > > $alpha_note_set[] = $row; }
> > >         $html='';
> > >         $html = '<table>';
> > >         $html .= '<tr>';
> > >                 // count here basically just keeps track of a
> > >                 // neatly aligned table
> > >                 $count=0;
> > >             foreach($alpha_note_set as $note) {
> > >                 $html .= "<td><a href=\"javascript:void(0);\"
> > > onclick=\"removeNote('".$note[ID]."','".$note[NAME]."')\">delete</a>&nbsp;&nbsp;$note[NAME]</td>";
> > >                 $count++;
> > >                 if(($count % 2 == 0)) {
> > >                         $html .= "</tr><tr>";
> > >                 }
> > >                 }
> > >         $html .= '</tr></table>';
> > >
> > >         // send this sucker back to the view.
> > >         echo $html;
> > > }
> > >
> > > Thanks all.
> > >
> > > - sf
> > >
> >
>

Reply via email to