Hello, I want to know (before I start learning Ruby) can everything be done ROR that can be done in PHP? I have already started a very large object orientated modular/scalable website that uses a lot of SERVER variables to create many sites from a single script/database. My question is, now that I've actually finished core code, I am moving onto design and have been told that Ajax + RoR complement each other perfectly. I have no qualms about restarting the several weeks of work i've already done because I'm sure I can improve on things, but can RoR handle anything that PHP can?
I'm not sure about RoR's overall possibilities, but I suggest you stick with php, there is so much more support for php, and it is open source which makes it even better
RoR is a framework based on Ruby.. PHP is not a framework, its a programming language like Ruby.. Ajax is another ballgame.. its not that easy to work with.. And even frustrating at time.. The browser incompatibility can drive you insane. I chose to only support firefox on my new project. But you may not have that luxury
PHP is a programming language but there's a lot of framework you can use like zend, cakephp, codeigniter, etc etc. Ajax is cool and its not really frustrating unless you dont have interest. Not all clients use firefox, so my recommendation is check the compatibility as IE still dominates.
I use this Javascript code to POST and GET things to the server and it works fine on all the major browsers. Hopefully it helps you. var request = false; var requested_page = null; function ajaxSend(url,data,form_type) { if (form_type.length == 0) { form_type = "GET"; } try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = false; } } } if (!request) { //Error } else { //ajax commands available. if (form_type == "POST") { request.open(form_type, url, true); request.onreadystatechange = ajaxReceive; request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request.send(data+"&ajax_call=true"); } else { request.open(form_type, url+"?"+data+"&ajax_call=true", true); request.onreadystatechange = ajaxReceive; request.send(null); } requested_page = data; } } function ajaxReceive() { if (request.readyState == 4) { if (request.status == 200) { //everything went smoothly var response = request.responseText; receivePage(response); } // else an error accessing the URL. } // else still processing, so do not execute routine } PHP: To send data to the server, use the ajaxSend(url,data,form_type) function. The result will be returned as the first parameter to a javascript function you must write and which must be called receivePage(response). To use JSON for returning variables, I create an array called $ajax_return of the form $ajax_return[$key] = $value and then run it through this: $ajax_return = array("action" =>"", //either "update node" or "call function" "targetNode" =>"", "newContent" =>"", "className" =>"", "callFunction"=>"false", "functionName"=>"" ); $echo_message = ""; $prefix = ""; foreach ($ajax_return as $key=>$value) { $echo_message .= $prefix.'"'.$key.'":"'.str_replace("\r",'',str_replace("\n",'\n',str_replace('"','\"',$value))).'"'; $prefix = ","; } echo '{'.$echo_message.'}'; PHP: I then use a generalized receivePage function shown here: /* Ajax Receive function * * Assumes JSON return variable. * The following variables are defined for this function: * * action := "update node" to pass newContent to targetNode and change the targetNode class name to className * := "call function" to call the Javascript function functionName. * * targetNode := The DOM ID for the item to receive newContent's value. * * newContent := The content to replace targetNode's content. * * className := The class name for targetNode when updating to newContent * * callFunction := True if functionName is to be called after content is updated and action=="update node" * * functionName := Name of funciton to be called if action=="call function" or callFunction=="true" */ function receivePage(returnObject) { content = eval('('+returnObject+')'); if (content.action == "update node") { //Update Content document.getElementById(content.targetNode).innerHTML = content.newContent; //Update Class if (content.className) { document.getElementById(content.targetNode).className = content.className; } } if (content.action == "call function" || content.callFunction == "true") { //Used to call custom functions by add on scripts //Passes the returnObject as an object to the function named window[content.functionName](content); } } PHP: Yes, it took awhile to put all of that together and test it on various browsers, but it gives great results and is very extendible. I just plug in the Ajax script and then all I have to do is populate the $ajax_return and adjust my Javascript, so it makes it fairly easy to work with Ajax with PHP and doesn't require any "frameworks". Hope that helps. Oh, one other bit. So that I know for sure if a POST or GET is through Ajax, the functions above will pass a variable called ajax_call with a value of true for each Ajax call, so I can use code like this: if ($_POST['ajax_call'] == true || $_GET['ajax_call'] == true) { $ajax_return = array("action" =>"", //either "update node" or "call function" "targetNode" =>"", "newContent" =>"", "className" =>"", "callFunction"=>"false", "functionName"=>"" ); $echo_message = ""; $prefix = ""; foreach ($ajax_return as $key=>$value) { $echo_message .= $prefix.'"'.$key.'":"'.str_replace("\r",'',str_replace("\n",'\n',str_replace('"','\"',$value))).'"'; $prefix = ","; } echo '{'.$echo_message.'}'; } PHP: