У меня есть глобальная функция, которая отправляет почтовые запросы к моему апи это выглядит следующим образом,Как я могу отправить функцию обратного вызова из глобального пространства имен для имени пространства (ОБЪЕМ выпуск)
function sendRequest(method,params,callback,cache,override){
var cacheObject = null;
if(override == true){
window.localStorage.removeItem(method);
}
//check if cache exists
if(cache == true){
console.log('attempting to find cache');
var cacheString = window.localStorage.getItem(method);
if(cacheString){
//put back into object and return to callback
cacheObject = JSON.parse(cacheString);
if(cacheObject){
console.log('cache found' + cacheString);
}
window[callback](cacheObject);
return true;
}
}
if(cacheObject == null || override == true){
console.log('sending new request');
var apiKey = "";
var sessionKey = null;
sessionKey = window.localStorage.getItem("session_key");
var params2 = {
api_key: apiKey,
session_key: sessionKey
}
var object = $.extend({}, params,params2);
var url = apiUrl+method;
var p = jQuery.param(object);
// console.log(url);
// console.log(p);
$.mobile.showPageLoadingMsg();
$.post(apiUrl+method,p,function(d) {
$.mobile.hidePageLoadingMsg();
// console.log(d.success);
// console.log(d.message);
var obj2 = d.data;
var dataString = JSON.stringify(obj2);
if(cache == true){
console.log('updating cache');
window.localStorage.removeItem(method);
window.localStorage.setItem(method,dataString);
}
console.log(dataString);
if(d.success == true){
window[callback](d.data);
}
else{
if(d.message != null){
alert(d.message);
}
}
},'json')
.error(function(xhr) {
console.log(xhr.status);
var status = xhr.status;
$.mobile.hidePageLoadingMsg();
if(status == 400){
window.localStorage.clear();
location.href='index.html';
}
});
return true;
}
return false;
}
Это работало нормально пока я не поместил свой javascript для страницы в пространство имен jquery, основанное на модели, найденной здесь, http://jacob4u2.posterous.com/documentready-with-jquery-mobile. У меня есть страница входа и прилагаемый к нему JS выглядит следующим образом
(function($, ns) {
function loginPage() {
};
loginPage.prototype.init = function($page, pageDom) {
$('#login_button').click(function() {
var params = {
email : $('#email').val(),
password : $('#password').val()
}
//test is the callback function that should fire via window[callback]
sendRequest('login',params,test);
});
};
ns.pages = ns.pages || {};
ns.pages.login = new loginPage();
function test(){
alert('callback successful');
}
}(jQuery, MYAPP));
, но я всегда получаю сообщение об ошибке, что функция окна [вызов] не определено. Кроме того, я не могу просто использовать функцию вне пространства имен в глобальной области, потому что все дело в том, чтобы поддерживать JS по модулю на странице.
Вы не знаете наверняка, что обратный вызов должен выполняться в рамках «окна». – JAAulde
@JAAulde - это правда. Я обновил свой ответ соответствующим образом. – RoccoC5
Это прекрасно работает, спасибо за помощь! – Brian