I'm with jrock on this one.   But maybe I'm a luddite that didn't get the memo 
either (but I am credited for being one of the instrumental folks in the Ajax 
world, heh - in one or more of the Ajax books out there, us old timers called 
it "remote scripting").

What I hate hate hate about seeing JSON being returned from a server for the 
browser to generate the view is stuff like:

   string = "<div>" + some_data_from_JSON + "</div>";

That embodies everything that is wrong about Ajax + JSON.

As Jonathan said, the server is already generating dynamic HTML... why have it 
return JSON and move processing/templating to the client for some things but 
not other things?  Rhetorical question... of course "it depends" on the 
application.  If everything is entirely client-side generated, then sure.  But 
for "traditional" webapps, JSON to the client to simply piece it together as 
HTML is hideous.

I spoke to this a bit at my recent ApacheCon talk, slides are here: 
<http://www.slideshare.net/erikhatcher/solr-flair-10173707> slides 4 and 8 
particularly on this topic.

So in short, opinions differ on the "right" way to do Ajax obviously.  It 
depends, no question, on the bigger picture and architectural pieces in play, 
but there is absolutely nothing wrong with having HTML being returned from the 
server for partial pieces of the page.  An in many cases it's the cleanest way 
to do it anyway.

        Erik



On Dec 5, 2011, at 18:45 , Jonathan Rochkind wrote:

> I still like sending HTML back from my server. I guess I never got the 
> message that that was out of style, heh.
> 
> My server application already has logic for creating HTML from templates, and 
> quite possibly already creates this exact same piece of HTML in some other 
> place, possibly for use with non-AJAX fallbacks, or some other context where 
> that snippet of HTML needs to be rendered. I prefer to re-use this logic 
> that's already on the server, rather than have a duplicate HTML 
> generating/templating system in the javascript too.  It's working fine for 
> me, in my use patterns.
> 
> Now, certainly, if you could eliminate any PHP generation of HTML at all, as 
> I think Godmar is suggesting, and basically have a pure Javascript app -- 
> that would be another approach that avoids duplication of HTML generating 
> logic in both JS and PHP. That sounds fine too. But I'm still writing apps 
> that degrade if you have no JS (including for web spiders that have no JS, 
> for instance), and have nice REST-ish URLs, etc.   If that's not a 
> requirement and you can go all JS, then sure.  But I wouldn't say that making 
> apps that use progressive enhancement with regard to JS and degrade fine if 
> you don't have is "out of style", or if it is, it ought not to be!
> 
> Jonathan
> 
> On 12/5/2011 6:31 PM, Godmar Back wrote:
>> FWIW, I would not send HTML back to the client in an AJAX request - that
>> style of AJAX fell out of favor years ago.
>> 
>> Send back JSON instead and keep the view logic client-side. Consider using
>> a library such as knockout.js. Instead of your current (difficult to
>> maintain) mix of PhP and client-side JavaScript, you'll end up with a
>> static HTML page, a couple of clean JSON services (for checked-out per
>> subject, and one for the syndetics ids of the first 4 covers), and clean
>> HTML templates.
>> 
>> You had earlier asked the question whether to do things client or server
>> side - well in this example, the correct answer is to do it client-side.
>> (Yours is a read-only application, where none of the advantages of
>> server-side processing applies.)
>> 
>>  - Godmar
>> 
>> On Mon, Dec 5, 2011 at 6:18 PM, Nate Hill<nathanielh...@gmail.com>  wrote:
>> 
>>> Something quite like that, my friend!
>>> Cheers
>>> N
>>> 
>>> On Mon, Dec 5, 2011 at 3:10 PM, Walker, David<dwal...@calstate.edu>
>>> wrote:
>>> 
>>>> I gotcha.  More information is, indeed, better. ;-)
>>>> 
>>>> So, on the PHP side, you just need to grab the term from the  query
>>>> string, like this:
>>>> 
>>>>  $searchterm = $_GET['query'];
>>>> 
>>>> And then in your JavaScript code, you'll send an AJAX request, like:
>>>> 
>>>>  http://www.natehill.net/vizstuff/catscrape.php?query=Cooking
>>>> 
>>>> Is that what you're looking for?
>>>> 
>>>> --Dave
>>>> 
>>>> -----------------
>>>> David Walker
>>>> Library Web Services Manager
>>>> California State University
>>>> 
>>>> 
>>>> -----Original Message-----
>>>> From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf Of
>>>> Nate Hill
>>>> Sent: Monday, December 05, 2011 3:00 PM
>>>> To: CODE4LIB@LISTSERV.ND.EDU
>>>> Subject: Re: [CODE4LIB] jQuery Ajax request to update a PHP variable
>>>> 
>>>> As always, I provided too little information.  Dave, it's much more
>>>> involved than that....
>>>> 
>>>> I'm trying to make a kind of visual browser of popular materials from one
>>>> of our branches from a .csv file.
>>>> 
>>>> In order to display book covers for a series of searches by keyword, I
>>>> query the catalog, scrape out only the syndetics images, and then
>>> display 4
>>>> of them.  The problem is that I've hardcoded in a search for 'Drawing',
>>>> rather than dynamically pulling the correct term and putting it into the
>>>> catalog query.
>>>> 
>>>> Here's the work in process, and I believe it will only work in Chrome
>>>> right now.
>>>> http://www.natehill.net/vizstuff/donerightclasses.php
>>>> 
>>>> I may have a solution, Jason's idea got me part way there.  I looked all
>>>> over the place for that little snippet he sent over!
>>>> 
>>>> Thanks!
>>>> 
>>>> 
>>>> 
>>>> On Mon, Dec 5, 2011 at 2:44 PM, Walker, David<dwal...@calstate.edu>
>>>> wrote:
>>>> 
>>>>>> And I want to update 'Drawing' to be 'Cooking'  w/ a jQuery hover
>>>>>> effect on the client side then I need to make an Ajax request,
>>> correct?
>>>>> What you probably want to do here, Nate, is simply output the PHP
>>>>> variable in your HTML response, like this:
>>>>> 
>>>>>  <h1 id="foo"><?php echo $searchterm ?></h1>
>>>>> 
>>>>> And then in your JavaScript code, you can manipulate the text through
>>>>> the DOM like this:
>>>>> 
>>>>>  $('#foo').html('Cooking');
>>>>> 
>>>>> --Dave
>>>>> 
>>>>> -----------------
>>>>> David Walker
>>>>> Library Web Services Manager
>>>>> California State University
>>>>> 
>>>>> 
>>>>> -----Original Message-----
>>>>> From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf
>>>>> Of Nate Hill
>>>>> Sent: Monday, December 05, 2011 2:09 PM
>>>>> To: CODE4LIB@LISTSERV.ND.EDU
>>>>> Subject: [CODE4LIB] jQuery Ajax request to update a PHP variable
>>>>> 
>>>>> If I have in my PHP script a variable...
>>>>> 
>>>>> $searchterm = 'Drawing';
>>>>> 
>>>>> And I want to update 'Drawing' to be 'Cooking'  w/ a jQuery hover
>>>>> effect on the client side then I need to make an Ajax request, correct?
>>>>> What I can't figure out is what that is supposed to look like...
>>>>> something like...
>>>>> 
>>>>> $.ajax({
>>>>>  type: "POST",
>>>>>  url: "myfile.php",
>>>>>  data: "...not sure how to write what goes here to make it
>>> 'Cooking'..."
>>>>> });
>>>>> 
>>>>> Any ideas?
>>>>> 
>>>>> 
>>>>> --
>>>>> Nate Hill
>>>>> nathanielh...@gmail.com
>>>>> http://www.natehill.net
>>>>> 
>>>> 
>>>> 
>>>> --
>>>> Nate Hill
>>>> nathanielh...@gmail.com
>>>> http://www.natehill.net
>>>> 
>>> 
>>> 
>>> --
>>> Nate Hill
>>> nathanielh...@gmail.com
>>> http://www.natehill.net
>>> 

Reply via email to