Мне кажется, я вижу проблему. Если у вас будет больше контекста, мы сможем помочь вам решить его лучше, но подход с минимальными изменениями заключается в запоминании последнего слушателя, например так (см. ***
комментарии):
function setmclisten(message, sender, sendResponse, data) { // *** Note `data` param
// at end
console.log(data);
if(message['type'] === 'startUp')
{
console.log(data);
sendResponse(data)
}
}
let lastListener = null; // *** Remember the last listener
function QuarryToServer(){
// *** Remove the last listener if any
if (lastListener) {
chrome.runtime.onMessage.removeListener(lastListener);
lastListener = null;
}
$.ajax({
type: "GET",
async: true,
form: 'formatted',
url: SERVERURL,
success: function (data) {
//sends a get
console.log("set startup listener");
// *** Create a new listener and attach it
lastListener = function(message, sender, sendResponse) {
return setmclisten(message, sender, sendResponse, data);
// *** Or if `this` is important in the call:
// return setmclisten.call(this, message, sender, sendResponse, data);
};
chrome.runtime.onMessage.addListener(lastListener);
},
fail: function () { console.error("error quarrying server"); }
});
}
В качестве альтернативы всегда подключайте прослушиватель, а не добавляйте и удаляйте его, и используйте последние данные:
let lastData = null; // ***
function setmclisten(message, sender, sendResponse) {
if (!lastData) {
return;
}
console.log(lastData);
if(message['type'] === 'startUp')
{
console.log(lastData);
sendResponse(lastData)
}
}
function QuarryToServer(){
$.ajax({
type: "GET",
async: true,
form: 'formatted',
url: SERVERURL,
success: function (data) {
lastData = data; // ***
},
fail: function () { console.error("error quarrying server"); }
});
}
В приведенном выше примере я предполагаю, что вы
chrome.runtime.onMessage.addListener(setmclisten);
один раз .