[ 2 posts ]

John Lutz

  • Username: JohnnyL
  • Joined: Tue Sep 07, 2010 6:46 am
  • Posts: 2
  • GitHub: JohnnyL
  • Gists: JohnnyL
  • IRC: JohnnyL
  • Offline
  • Profile

Response from server for callback mangled and different...

Post Posted: Tue Sep 07, 2010 6:59 am
+0-
Hi Guys,
I get a mangled callback that doesn't appear to be recognized as a function when it returns back from the server.

The original server (sourcecode in PHP/ZEND):
callback YUI.Env.DataSource.callbacks[0]
format json
radius 25
state NY
zip_code 11934

The Simulated server (sourcecode in Python/Django):
callback YUI.Env.DataSource.callbacks.yui_3_2_0pr1_1_128386915826181
format json
radius 25
state NY
zip_code 11934

That is the biggest difference I see between the two servers and the error I get is:
JavaScript - http://127.0.0.1:8000/locator?zip_code= ... 25&search=

Uncaught exception: TypeError: 'YUI.Env.DataSource.callbacks[0]' is not a function
Error thrown at line 1, column 0 in http://127.0.0.1:8000/locator/searchjso ... 7110999181:
YUI.Env.DataSource.callbacks[0]({"Response": {"minLat": "40.726493", "minLong": "-73.269788", "maxLong": "-72.343743", "Results": [{"addr_2": "", "city": "East Setauket", "first_name": "Ian", "last_name": "Goldstein", "contract_status": "unknown", "show_contact_button": "no", "formatted_sales_number": "", "dba": "", "email_addr": "", "sales_number": "", "longitude": "-73.10366", "company_website": "", "state": "NY", ...

Thanks in advance guys,
JohnnyL

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
The source code is as follows:
YUI({base: '/libmedia/library/yui3/'}).use('base', 'node', 'event', 'overlay', 'datasource', "datasource-io", "datasource-jsonschema", 'dataschema', 'anim', function(Y) {
var pageTitle;
var searchDialog = (function() {
var dS;
var cB;
var node;
var overlay;

var show = function() {
new Y.Anim({node: node, to: { opacity: 1}}).run();
}

var hide = function() {
new Y.Anim({node: node, to: { opacity: 0}}).run();
}

var init = function(args) {
dS = args.dataSource;
cB = args.callback;
node = Y.get("#searchDialog");
node.setStyle("zIndex", 1000);

overlay = new Y.Overlay({
contentBox:'#searchDialog',
zIndex: 3
});

Y.get("#searchDialog form").on("submit", function(e) {
dS.sendRequest("zip_code=" + Y.get("#zip_code").get("value"), cB);
e.preventDefault();
});
}
return { 'init': init , 'show': show, 'hide': hide};
})();

/* LocatorMap definition */
var locatorMap = (function() {
var map;
var node;
var overlay;
var locatorResults;
var locatorResultsWrapper;

var renderData = function(response) {
var infowindow = new google.maps.InfoWindow();
var markerImage = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/grn-pushpin.png", new google.maps.Size(32, 32));
function createElement(elementType, options)
{
element = new YAHOO.util.Element(document.createElement(elementType, options));
return element;
}

function createTextElement(text, elementType, options)
{
textNode = document.createTextNode(text);
element = createElement(elementType, options);
element.appendChild(textNode);
return element;
}

function addMarker(item)
{
var dealer = item.dealer;
var latLng = new google.maps.LatLng(Number(dealer.latitude), Number(dealer.longitude));
var html = getInfoWindowHtml(dealer);
item.addClass('pin');
item.marker = new google.maps.Marker({
position: latLng,
map: map,
title: dealer.company_name,
icon: markerImage
});

google.maps.event.addListener(item.marker, 'click', function() {
infowindow.setContent(html);
infowindow.open(map, item.marker);
});

item.on('click', function() {
infowindow.setContent(html);
infowindow.open(map, item.marker);
});
}

function getInfoWindowHtml(dealer)
{
var html = "<div class=\"vcard\" style=\"height:100px;width:250px;overflow:auto\">";
html += "<h4 class=\"fn org\">" + dealer.dba + "</h4>";
html += "<div>" + dealer.first_name + " " + dealer.last_name + "</div>";
html += "<div class=\"adr\">";
html += "<div class=\"street\">" + dealer.addr_1;
if(dealer.addr_2 != '') {
html += ", " + dealer.addr_2;
}
html += "</div>";
html += "<div>";
html += "<span class=\"city\">" + dealer.city + "</span>, ";
html += "<span class=\"region\">" + dealer.state + "</span> ";
html += "<span class=\"postal_code\"" + dealer.zip_code + "</span>";
html += "</div>";
html += "</div>";
if(dealer.company_website) {
html += "<div><a class=\"url\" href=\"" + dealer.company_website + "\">" + dealer.company_website + "</a></div>";
}
if(dealer.sales_lead_email_addr) {
html += "<div><a class=\"email\" href=\"mailto:" + dealer.sales_lead_email_addr + "\">" + dealer.sales_lead_email_addr + "</a></div>";
}
if(dealer.sales_number) {
html += "<div class=\"phone\">" + dealer.formatted_sales_number + "</div>";
}
if(dealer.show_contact_button == 'yes') {
html += '<a href="/locator/contact/bts_dealer_id/' + dealer.id + '/zip_code/' + searchedZipCode + '">Contact this Dealer</a>';
}
html += "</div>";
return html;
}


var dealers = response.results;
var locatorMap = Y.get('#locatorMap');
if(dealers.length == 0) {
locatorMap.set("innerHTML", "<p>No results found. Please <a href=\"/locator\">search</a> again.</p>");
locatorMap.setStyle("opacity", 100);
return;
}
var first = true;
for(var i = 0; i < dealers.length; i++) {
var level = dealers[i].contract_status;
if(level == 'unknown') {
level = 'certified';
}

if (dealers[i].is_ncp_certified == 'yes') {
level += '-ncp';
}

var item = createElement('li');
item.set('className', 'vcard ' + level);
item.set('id', "hcard-" + encodeURI(dealers[i].dba.replace(/[\s]+?/, '-')));
item.addClass(level);
item.appendChild(createTextElement(dealers[i].dba,'h4', {'class': 'org'}));
var agent = createElement('div', {'class': 'agent'});
agent.appendChild(createTextElement(dealers[i].first_name + ' ' + dealers[i].last_name,'div', {'class': 'fn'}));
item.appendChild(agent);
var adr = createElement('div', {'class': 'adr'});
adr.appendChild(createTextElement(dealers[i].addr_1, 'div', {'class': 'street-address'}));
if(dealers[i].addr_2 != '') {
adr.appendChild(createTextElement(dealers[i].addr_2, 'div', {'class': 'extended-address'}));
}
adr.appendChild(createTextElement(dealers[i].city, 'span', {'class': 'city'}));
adr.appendChild(document.createTextNode(', '));
adr.appendChild(createTextElement(dealers[i].state, 'span', {'class': 'region'}));
adr.appendChild(document.createTextNode(' '));
adr.appendChild(createTextElement(dealers[i].zip_code, 'span', {'class': 'postal-code'}));

item.appendChild(adr);

if(dealers[i].company_website) {
var company_website = createTextElement(dealers[i].company_website, 'a', {'class': 'url'});
company_website.addClass('url');
company_website.set('href', dealers[i].company_website);
item.appendChild(company_website);
}

if(dealers[i].sales_lead_email_addr) {
var email = createTextElement(dealers[i].sales_lead_email_addr, 'a', {'class': 'email'});
email.addClass('email');
email.set('href', 'mailto:' + dealers[i].sales_lead_email_addr);
item.appendChild(email);
}

item.appendChild(createTextElement(dealers[i].formatted_sales_number,'div', {'class': 'tel'}));
if(dealers[i].show_contact_button == 'yes') {
var contactButton = createTextElement('Contact this Dealer','a', {'className': 'contactButton'});
contactButton.set('href', '/locator/contact/bts_dealer_id/' + dealers[i].id + '/zip_code/' + searchedZipCode);
contactButton.set('className', 'contactButton');
item.appendChild(contactButton);
}

item.dealer = dealers[i];
addMarker(item);
locatorResults.appendChild(item);
}
var swLatLng = new google.maps.LatLng(Number(response.meta.minLat), Number(response.meta.minLong));
var neLatLng = new google.maps.LatLng(Number(response.meta.maxLat), Number(response.meta.maxLong));
alert("swLatLng=" + swLatLng + " neLatLng=" + neLatLng);
map.fitBounds(new google.maps.LatLngBounds(swLatLng, neLatLng));
locatorMap.setStyle("opacity", 100);

}

var show = function() {
node.setStyle("opacity", 0);
new Y.Anim({node: node, to: { opacity: 1}}).run();
}

var hide = function() {
new Y.Anim({node: node, to: { opacity: 0}}).run();
node.setStyle("opacity", 0);
}

var init = function() {
var latlng = new google.maps.LatLng(40.781111, -74.064444);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false
};
map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);

node = Y.get("#locatorMap");
node.setStyle("opacity", 0);
locatorResultsWrapper = new YAHOO.util.Element('locator-results-wrapper');
locatorResults = new YAHOO.util.Element(document.createElement('ol'), {id: 'locator-results'});
locatorResults.addClass('locatorResults');
locatorResultsWrapper.appendChild(locatorResults);
overlay = new Y.Overlay({
contentBox:'#locatorMap',
zIndex: 2
});
}
return { 'init': init, 'renderData': renderData, 'show': show, 'hide': hide};
})();

function init() {
//var myDataSource = new Y.DataSource.Get({source:"/locator/searchjson?format=json&"}),
var myDataSource = new Y.DataSource.Get({source:"/locator/searchjson?format=json&"}),
myCallback = {
success: function(e) {
locatorMap.renderData(e.response);
},
failure: function(e){
alert("Could not retrieve data: " + e.error.message);
}
};

myDataSource.plug({fn: Y.Plugin.DataSourceJSONSchema, cfg: {
schema: {
resultListLocator: "Response.Results",
resultList: "Response.Results", //JKL NEW
resultFields: ["id", "first_name", "last_name", "company_name", "dba", "sales_number", "formatted_sales_number", "company_website", "email_addr", "sales_lead_email_addr", "addr_1", "addr_2", "city", "state", "zip_code", "latitude", "longitude", "contract_status", "show_contact_button", "is_ncp_certified"],
metaFields: {maxLat:"Response.maxLat", minLat:"Response.minLat", maxLong:"Response.maxLong", minLong:"Response.minLong"}

}
}});

if((typeof searchedZipCode) != "undefined") {
locatorMapContainer = new Y.Node("#locatorMap");
locatorMap.init();
alert(searchedZipCode);
alert(searchedRadius);
myDataSource.set("scriptCallbackParam", "myCallback");
myDataSource.sendRequest({request: "zip_code=" + searchedZipCode + "&state=" + searchedState + "&radius=" + searchedRadius}); //, callback: myCallback});
}
//originally REMed
//searchDialog.init({'dataSource': myDataSource, 'callback': myCallback});
pageTitle = new Y.Node("#pageTitle");

}

Y.on('domready', init);
});

John Lutz

  • Username: JohnnyL
  • Joined: Tue Sep 07, 2010 6:46 am
  • Posts: 2
  • GitHub: JohnnyL
  • Gists: JohnnyL
  • IRC: JohnnyL
  • Offline
  • Profile

Re: Response from server for callback mangled and different.

Post Posted: Tue Sep 07, 2010 1:57 pm
+0-
This is for version 3.x btw.

Ok I got a bunch of great help online from ls_n...:

1) switched it from Datasource.Get to Datasource.IO
2) imported json-parse
3) fully removed callbacks[0]( ) from serverside return
4) Aparently the callback mangled name is new for GET.. Thats why it broke with the new
lib (I was prolly using a more older version for the original server). Still don't know, But I don't need DataSource.Get so the point it mute... for now

Thats about it. I knew it was just a switch or 2 (or 3) that would get this thing to work.
Props to ls_n!

JohnnyL
  [ 2 posts ]
Display posts from previous:  Sort by  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum