Ich habe die folgenden JSON von einem API-Anruf zurückgegeben. Ich möchte überprüfen, ob ein bestimmter Ereignistyp für bestimmte Produkte protokolliert wird, und wenn der richtige Ereignistyp eine entsprechende Nachricht zurückgibt und den Klick-Handler beenden, andernfalls fortfahren. Ich habe eine Funktion namens hasEvent
, um diese Prüfung durchzuführen. Aber wenn ich diese Funktion von aufrufen, wird keine Nachricht zurückgegeben, auch wenn die Prüfung wahr ist?jQuery - Rückruf funktioniert nicht
{
"item": {
"Event": [
{
"EventType": {
"Description": "New order"
},
"EventSubType": {
"Description": "Awaiting payment"
}
},
{
"EventType": {
"Description": "New order"
},
"EventSubType": {
"Description": "Dispatched"
}
}
],
"Errors": {
"Result": 0,
"Message": ""
},
"RecordCount": 2
}
}
var getEvents = function (callback) {
var orderId = $("#Id").val();
$.getJSON('api/events?id=' + orderId)
.done(function (data) {
callback(data);
}).fail(function (jqXHR, textStatus, err) {
return;
});
}
var hasEvent = function (productType, callback) {
var msg;
getEvents(function (data) {
_.find(data.item.Event, function (event) {
if (event.EventType.Description == 'New order' &&
event.EventSubType.Description == 'Dispatched' &&
productType = 'xyz') {
msg = 'Some message';
return true;
}
if (event.EventType.Description == 'New order' &&
event.EventSubType.Description == 'Awaiting payment' &&
productType = 'xyz') {
msg = 'A different message';
return true;
}
// Check for Some more conditions and return appropriate message
return false;
});
if (msg)
callback(msg);
});
}
var someOtherFunction = function() {
$('.myselector').click(function (e) {
var productType = $(this).attr("data-product-type");
hasEvent(productType, function(msg) {
alert(msg);
// exit click event handler
return;
});
// otherwise do some other stuff
return false;
}
}
Was ist falsch mit dem obigen Code?
* UPDATE *
ich den Code aktualisiert habe nach Griffins Lösung durch einen Rückruf an die hasEvent
Funktion hinzugefügt, aber jetzt, wie ich den folgenden Click-Handler beende, wenn eine Warnung angezeigt bekommen. Die folgende einfach weiter auszuführen, bis alle Aktionen innerhalb der Click-Handler abgeschlossen sind, das ist nicht das, was ich will - ich will den Handler verlassen, wenn es Ereignisse und Alarm angezeigt:
$('.myselector').click(function (e) {
var productType = $(this).attr("data-product-type");
hasEvent(productType, function(eventMsg) {
alert(msg);
// exit click event handler
return;
});
// Do some other stuff only if no events
return false;
}
'// Exit Click Event Handler 'ist was falsch ist. auch '// tu etwas anderes nur, wenn auch keine Ereignisse im Callback sein sollten. gogoasynchronouslogic –