| Page 1 of 1 | [ 2 posts ] |
|
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); }); |
|
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 |
| Page 1 of 1 | [ 2 posts ] |
| 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 |
© 2006-2013 Yahoo! Inc. All rights reserved.
All code on this site is licensed under the BSD License unless stated otherwise.
About This Site · Security Contact Info
Powered by phpBB® Forum Software © phpBB Group