views:

116

answers:

2

I have a div tag that I want to change only if a function returns true, otherwise I want it to keep the same content. I used render: nothing => true but that removes everything.

<%= javascript_include_tag :defaults %> 
<div id="x">Hi</div>
<% form_remote_tag :url => {:action => 'get'},
    :update => 'x' do %>
<%= text_field_tag 'url' %>
<%= submit_tag "Submit" %>
<% end %>



def getImage
 @img = params[:url]
 if !verify @img
  render :nothing => true
 end
end
private
def verify url
 return true if url =~ /https?:\/\/.*\.(jpg|png|gif|bmp)$/
 return false
end

I want to make my rails code do this

var lastrequest = "";

function ajaxObj() { //Returns the ajax object based on browser
    if ( window.XMLHttpRequest ) {
     return new XMLHttpRequest(); //Firefox
    } else if ( window.ActiveXObject ) {
     return new ActiveXObject("Microsoft.XMLHTTP"); //IE
    }
}

window.onload = function() {
    document.getElementById("Submit").onclick = function() { 
     var request = ajaxObj();

     request.onreadystatechange = function() { 
      if ( request.readyState == 4 ) { 
       document.getElementById("imgdisplay").innerHTML = request.responseText; 
       document.getElementById("imgurl").value = "";
      }
     }

     if ( lastrequest != document.getElementById("imgurl").value ) { // Makes sure it doesn't request the same image twice
      var parameters = "url=" + document.getElementById("imgurl").value;

      request.open("POST", "imageget.php", true); // Sends the ajax request
      request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      request.setRequestHeader("Content-length", parameters.length);
      request.setRequestHeader("Connection", "close");
      request.send(parameters);

      lastrequest = document.getElementById("imgurl").value;
     }
    }
}
A: 

use status codes or a failure to control what happens. http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001645

cgr
A: 

You can also remove the :update => 'x' part an use following code in your controller:

def getImage
        @img = params[:url]
        if !verify @img
                render :nothing => true
        else
                render :update do |page|
                    page['x'].replace_html :partial => <some partial here>
                end
        end
end

Or, a bit briefer:

def getImage
        @img = params[:url]
        render :update do |page|
            page['x'].replace_html(:partial => <some partial here>) if verify(@img)
        end
end

Greets

Wout Neirynck
This was really close but it still makes it blank if it fails.
deuces