ThinkGeo.com    |     Documentation    |     Premium Support

Multiple Parameter Search

Hi, im trying to let a user input an Address that is broken down into parts like address,city,state,zip and so on 

but from some reason my ajax call wont bring in the second parameter i try to pass to i, here is the java function 

The html is a basic  text box 


<div class=“four columns” id=“navigation”>
    <div id=“instrux-body”>
        <label for=“txtSearch”>Search Wells by Lease Name:</label>
        <input type=“text” id=“txtSearch” />
        <label for=“txtTest”>Field Name</label>
        <input type=“text” id=“txtTest” />
        <input type=“button” id=“btnSearch” onclick=“searchWellByLeaseName()” value=“Search” />
    </div>
</div>

Is there something i have overlooked any help is appreciated


function searchWellByLeaseName() {
       // Remove previous search results display, if any
       $(’#well-search-results’).remove();
 
       // Get the OpenLayers map object
       var olMap = Map1.getOpenLayersMap();
 
       // Get the query the user entered in the search textbox
       var searchText = txtSearch.value;
       var fieldText = txtTest.value;
       // Do nothing if the query was blank or contained only whitespace
       if (searchText === null || searchText.match(/^ *$/) !== null ){
           return false;
       }
 
       // Call the SearchText server action with the search query and current map size
       var params = { searchMode: ‘lease_name’, searchParam: searchText, fieldParam:fieldText, mapWidth: Map1.div.clientWidth, mapHeight: Map1.div.clientHeight };
      
       Map1.ajaxCallAction(“Home.mvc”, ‘SearchWells’, params , function (result) {
           // The callback contains a JSON string representing either the extent to zoom into, or a collection of features matching the query.
           var returnResult = result.get_responseData();
           if (returnResult != “”) {
               var searchResultFeatures = JSON.parse(returnResult);
 
               // If there was exactly one result, the return contains an extent that we should zoom into.
               if (searchResultFeatures.length === 1) {
                   var featureExtent = searchResultFeatures[0].wkt;
                   olMap.zoomToExtent(OpenLayers.Geometry.fromWKT(featureExtent).getBounds(), true);
               }
                   // If there is more than one result, display a list allowing the user to select which one they want to zoom to.
               else if (searchResultFeatures.length > 1) {
 
                   var resultsMarkup = ‘<div id=“well-search-results”><ul>’;
                   jQuery.each(searchResultFeatures, function (index, object) {
                       var id = object.id;
                       var kid;
                       var leaseName;
                       
                       jQuery.each(object.values, function (index, object) {
                           if (object.Key == ‘KID’) kid = object.Value;
                           if (object.Key == “LEASE_NAME”) leaseName = object.Value;
                         
                       });
                       resultsMarkup += ‘<li><a href="#" data-featureid="’ + id + ‘" title=“KID: ’ + kid + '”>’ + leaseName + ‘</a></li>’;
                   });
                   resultsMarkup += ‘</ul>’;
 
                   $(’#instrux-body’).append(resultsMarkup);
                   $(’#well-search-results’).css({
                       top: ($(’#txtSearch’).position().top + $(’#txtSearch’).outerHeight(true)) + ‘px’,
                       left: $(’#txtSearch’).position().left + ‘px’,
                       “min-width”: $(’#txtSearch’).outerWidth(true) + ‘px’,
                   });
                   $(’#well-search-results ul’).sortList();
 
               }
           }
               // If there are no results, display a message to that effect
           else {
               var resultsMarkup = ‘<div id=“well-search-results”><ul><li class=“no-result”>No results found.</li></ul></div>’;
               $(’#instrux-body’).append(resultsMarkup);
               $(’#well-search-results’).css({
                   top: ($(’#txtSearch’).position().top + $(’#txtSearch’).outerHeight(true)) + ‘px’,
                   left: $(’#txtSearch’).position().left + ‘px’,
                   “min-width”: $(’#txtSearch’).outerWidth(true) + ‘px’,
               });
           }
       });
 
       // Redraw the WellOverlay layer
       Map1.redrawLayer(“WellOverlay”);
   }




Hi Gordon,



Do you mean the ajax call can arrive at the action method in controller but the second parameter is missing or broken? Actually, the ajaxCallAction method only supports the simple object as its parameter and can’t includes some special characters like “:”,"^". So, would you please check your searchText to see if any special characters in it or give it a simple string to test if the issue is related with it?



Actually, if we debug into the ajaxCallAction method, in the lowest level, we are using the below codes to send the request:


ajaxCall: function (url, params, callback) {
    var wRequest = new Sys.Net.WebRequest();
    wRequest.set_url(url);
    wRequest.set_httpVerb(‘POST’);
    var mapParser = this.getMapParser();
    var param = ‘__#’ + mapParser.pageName + “|__#”;
    for (var item in params) {
        param = param + item + “:” + params[item] + ‘^’;
    }
    wRequest.set_body(param);
    wRequest.add_completed(callback);
    wRequest.invoke();
}

If the issue persists, please feel free to let us know.

Thanks,

Troy



 

Ok so i got the ajax call to work, but with the mutiple parameters i have been looking for a way to axcess the shape files and have come up with two ways.   searchResults = allFeatures.Where(f => f.ColumnValues["LEASE_NAME"].ToLower().Contains(searchQuery.ToLower())).ToList();  
 I was wondering if there was a way to change this from getting one parameter to multiple

Hi Gordon, 
  
 Sorry I am not very clear on your issues, would you please give us more descritions?  
 Thanks, 
 Troy