On 05/03/07, Jim Wharton <[EMAIL PROTECTED]> wrote:
> Hi, I'm trying to change a bunch of handwritten Ajax stuff to use jQuery's
> methods. (I figure, if I'm already including the jquery.js file, I may as
> well use the heck out of it.)
>
> My current code sends a request to a php page and gets back an xml result I
> do the standard way of creating a request object(try/catch for MSXML vs XHR)
>
> here is the code to create my request and callback:
>
> var http = createRequestObject(); //this just references that object I just
> created.
>
> function ajax ( url, callback )
> {
> http.open ( 'get', url, true );
> http.onreadystatechange = callback;
> http.send(null);
> }
>
> function sendRequest() {
> var url = "getItems.php?cat_id=" + idsource;
> ajax( url, handleInfo );
> }
>
> my handleInfo function does a nice for loop based on an array(object) and
> generates table html for each "record":
>
> function handleInfo() {
> if (http.readyState == 1) {
> //document.getElementById("itemtable" +idsource).innerHTML =
> '<h1>Loading...</h1>'
> }
> if (http.readyState == 4) {
> if (http.status == 200) {
> var xmlDoc = http.responseXML.documentElement;
> var output;
> output = '<table><thead><tr><th>Items
> Available</th></tr></thead><tbody>';
> // Create table rows for each record
> for (var i=0; i < xmlDoc.childNodes.length;
> i++)
> {
> var linkId =
> xmlDoc.getElementsByTagName('item_id').item(i).firstChild.data;
> output += '<tr>';
> output += '<td>'+linkId;
> output += '<td><a
> href="itemdetail.php?item_id='+linkId+'"
> >'+xmlDoc.getElementsByTagName('item_name').item(i).firstChild.data+'</a></td>';
> output += '</tr>';
> }
> output += '</tbody></table>';
> document.getElementById("itemtable"
> +idsource).innerHTML = output;
> }
> }
> }
>
> Ok, fairly generic routine stuff. Only problem is, I can't bend my mind
> around the way to do it in jQuery!!! I have started playing around with the
> .get method:
>
> $(document).ready(function() {
> $('#resultcontainer').accordion();
> $("dt").click(function(){
> idsource = $(this).attr("id");
> $.get("getItems.php", {cat_id:
> idsource}, function(xml){
> //build a table from xml
> results.
> var output =
> '<table><thead><tr><th>Items Available</th></tr></thead><tbody>';
> var xmlDoc =
> xml.documentElement;
> //create rows for each result.
> for (var i=0;
> i<xmlDoc.childNodes.length; i++)
> {
> var linkId =
> $("item_id", xmlDoc).item(i).firstChild.data;
> output += '<tr>';
> output +=
> '<td>'+linkId+'</td>';
> output += '</tr>';
> }
> output += '</tbody></table>';
>
> $('#itemtable'+idsource).html(output);
> });
> })
> });
>
> but this seems to cough up errors about linkId not being a function..... Am I
> at least on the right path?
>
> What this code does is everytime one clicks on a "dt" element, it sends the
> request based on the id.... (just a number) then it submits the ajax request.
> I'm really not sure at all how to deal with the object it returns... so
> that's why you see me treating it just like I would any other xml object.
>
> I'd be happy to post all my code but I don't want to suck up a ton of
> bandwidth... this being my first post and all that.....
>
> (In a future revision of this code, I'll actually let the accordian wait
> until the object is returned before I slide it down.....)
>
> Thanks,
> -Jim
Have you looked at the ajax method? I think this may work:
$.ajax({
type: "GET",
url: "getItems.php",
data: {cat_id: idsource},
dataType: "xml",
success: function(xml){
//build a table from xml results.
var output = '<table><thead><tr><th>Items
Available</th></tr></thead><tbody>';
//create rows for each result.
for (var i=0; i<xml.childNodes.length; i++)
{
var linkId = $("item_id", xml).item(i).firstChild.data;
output += '<tr>';
output += '<td>'+linkId+'</td>';
output += '</tr>';
}
output += '</tbody></table>';
$('#itemtable'+idsource).html(output);
}
})
Or, perhaps even better (a more jQuery way):
$.ajax({
type: "GET",
url: "getItems.php",
data: {cat_id: idsource},
dataType: "xml",
success: function(xml){
//build a table from xml results.
var output = '<table><thead><tr><th>Items
Available</th></tr></thead><tbody>';
//create rows for each result.
$("item_id", xml).each(
function() {
output += '<tr>';
output += '<td>'+$(this).text()+'</td>';
output += '</tr>';
}
)
output += '</tbody></table>';
$('#itemtable'+idsource).html(output);
}
})
_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/