2014-09-23 4 views
0

Я пытаюсь вернуть список сеансов фильмов, играющих в заданном радиусе. У меня есть класс JavaScript, который я создаю для отображения данных из API. Я действительно следовал примеру, приведенному от here. Я знаю, что это какая-то проблема, потому что, если я переведу свою функцию обратного вызова (dataHandler) вне класса, тогда она работает нормально.

Вот мой класс (ошарашенный) - Если я запустил этот код, так как он здесь, я получаю ссылку на ошибку, «dataHander is undefined».

Заранее благодарен! Надежда есть достаточно информации здесь, чтобы помочь ..

function Locator() { 
    // Init 
    function init(){ 
     test(); 
    }; 


    function test() { 
     // construct the url with parameter values 
     var apikey = "myapikey"; 
     var baseUrl = "http://data.tmsapi.com/v1"; 
     var showtimesUrl = baseUrl + '/movies/showings'; 
     var zipCode = "78701"; 
     var d = new Date(); 
     var today = d.getFullYear() + '-' + (d.getMonth()+1) + '-' + d.getDate(); 

     // send off the query 
     $.ajax({ 
      url: showtimesUrl, 
      data: { startDate: today, 
       zip: zipCode, 
       api_key: apikey, 
       jsonp: "dataHandler" 
      }, 
      dataType: "jsonp", 
     }); 

     // callback to handle the results 
     function dataHandler(data) { 
      console.log(data); 
     } 

    }; 

    init(); 
    // Return 
    return { 

    }; 
}; 
+0

Вы можете удалить много ненужных запятой после закрывающей скобки для функции (например, после того, как ' init'), но что еще более важно, вы используете этот код на 'document.ready'? – mc10

+0

Спасибо за подсказку! Очень признателен. Этот экземпляр этого класса создается на document.ready – tbourne89

ответ

0

Я думаю, проблема в том, как вы обрабатываете обратный вызов jsonp.

Вы пропускание JSONP обратного вызова, используя параметр с именем jsonp и передавая имя функции dataHandler но функция dataHandler является методом закрытия внутри метода test. Когда ответ вернется, метод с именем dataHandler будет искать в глобальном контексте, где он не существует, что вызывает ошибку.

Вы можете использовать Ajax обработчик success обрабатывать полученные данные, как

// send off the query 
$.ajax({ 
    url: '/echo/json/', 
    data: { 
     startDate: '', 
     zip: '', 
     api_key: '' 
    }, 
    jsonp: 'jsonp', 
    dataType: "jsonp", 
    success: function (data) { 
     console.log(data); 
    } 
}); 

Демо: Fiddle

+0

Это делает именно то, что мне нужно, чтобы это сделать, спасибо! Теперь я предполагаю, что могу сохранить данные в переменной для использования в другом месте? – tbourne89

0

Попробуйте изменить свой $.ajax код на следующее:

$.ajax({ 
    url: showtimesUrl, 
    data: { 
     startDate: today, 
     zip: zipCode, 
     api_key: apikey 
    }, 
    dataType: "jsonp", 
    jsonp: "jsonp" 
}).done(dataHandler); 

Это основано на v1 API documentation for OnConnect.