I assume you have a table assigned to
$data = $modx->getObject('userData', array('userdata_id' => $userId));
If you were intending to access the user profiles is would be:
$data = $modx->getObject('modUserProfile', array('userdata_id' => $userId));
In any case, here is a suggestion which should get you to an answer faster:
$criteria = $this->modx->newQuery('modUserProfile');
$criteria->where(array(
$field => $value
));
$collection = $this->modx->getCollection('modUserProfile', $criteria);
This allows you to do things like retrieving the actual SQL used in the query and use specified data pairs:
$criteria = $this->modx->newQuery('modUserProfile');
$criteria->where(array(
// $field => $value
'state'=>$csaacProv
));
$criteria->prepare();
echo $criteria->toSql();
//$collection = $this->modx->getCollection('modUserProfile', $criteria);
This could be as simple as the query needs to be:
$criteria = $this->modx->newQuery('modUserProfile');
$criteria->where(array(
// $field => $value
'state:LIKE' => '%"' . $csaacProv . '"%'
));
Make sure your query is lining up to the table fields.
I recently created a GeoGraphicalLookup platform for MODX Revo and had to develop a means to retrieve a Location by a half a dozen fields simultaneously.
The table had to be defined so it was CI (case insensitive) in my case to make sure preexisting records of FL, Fl, fl where all matched.
New users to sites are asked to select their State/ Province from the same table they are being retrieved from in situations such as yours.
As far as the browser consideration is, other than a minimum length of page content for Internet Explorer there would be no reason for the query to work one way and not another.
Is the snippet being ran cached?