2017-05-02 1 views
1

Ich spiele gerade mit einem Twitter-API-Wrapper für Node und versuche herauszufinden, wie ein Abfrageparameter von einem HTML-Formular an einen AJAX-get übergeben wird Anfrage und habe diesen Parameter dann in meine Express-Route übergeben, anstatt nur die Formularaktion direkt auf die Route zu gehen.Übergabe eines Abfrageparameters von einem AJAX-Anruf an eine Expressroute

Hier ist mein HTML-Code

<form id="searchTerm"> 
    Keyword:<input id="keyword" type="text" name="q" placeholder="Keyword"> 
    <input type="submit"> 
    </form> 

Mein clientseitige Javascript

$(document).ready(function() { 
    $('#searchTerm').on('submit', function() { 
    $.ajax({ 
     type: 'GET', 
     data: q, 
     url: '/search/tweets/term', 
     success: function(data) { 
     console.log(data); 
     }, 
     error: function(error) { 
     console.log(error); 
     } 
    }); 
    }); 
}); 

Und dann Route meine Node.JS:

// Search by keywords or phrases 
app.get('/search/tweets/term', function(req, res) { 
    var q = req.query.q; 

// Accesses the Twitter API and pulls back the respective tweets 
    client.get('search/tweets', {q: q, count: 100, lang: 'en', exclude: 'retweets'}, function(error, tweets, response) { 
    if(!error) { 
     res.send(tweets); 
    } else { 
     console.log(error); 
     res.status(500).send(error.stack); 
    } 
    }); 
}); 

Ich erhalte eine „Abfrage fehlt Parameter "Fehlermeldung in meinem Terminal, wenn ich jedoch einen Wert in das Formular eingab. Ich bin mir nicht sicher, was ich falsch mache.

UPDATE

Verstanden über folgende Arbeiten:

$(document).ready(function() { 
    $('#searchTerm').on('submit', function(e) { 
    e.preventDefault(); 
    var q = $('#keyword').val(); 

    $.ajax({ 
     type: 'GET', 
     data: {q: q}, 
     url: '/search/tweets/term', 
     success: function(data) { 
     console.log(data); 
     } 
    }) 
    }) 
}) 

Da aber ich bin Umsetzung e.preventDefault(), ich bin die Abfrageparameter in meiner URL zu verlieren. Da ich Benutzern die Möglichkeit geben möchte, URLs mit bestimmten Schlüsselwörtern zu teilen, gibt es eine Möglichkeit, diese Parameter in der URL intakt zu halten, während die JSON-gesendete Client-Seite immer noch empfangen wird? Oder muss man einfach den JSON auf der Serverseite manipulieren und die Daten über eine Template Engine einspielen lassen?

+1

'Daten: q,' woher definieren Sie 'q'? –

+0

Daten: "q" Quoten? – Icewine

+0

Verhindern Sie das Senden des Formulars. Weil, wenn Sie nicht Ihr Ajax holt das Ergebnis, aber die Webseite hat auf die nächste Seite navigiert ... – deostroll

Antwort

-1

dieses Versuchen

$(document).ready(function() { 
 
    $('#searchTerm').on('submit', function() { 
 
    $.ajax({ 
 
     type: 'GET', 
 
     data: q, 
 
     url: '/search/tweets/term?q=', 
 
     success: function(data) { 
 
     console.log(data); 
 
     }, 
 
     error: function(error) { 
 
     console.log(error); 
 
     } 
 
    }); 
 
    }); 
 
});

+0

eine Erklärung von Ihrem "Versuchen Sie das"? zum Beispiel, warum Ihr Code funktioniert und warum der OP-Code nicht funktioniert. – Mark

+0

Er verwendet var q = req.query.q für den Knotenparameter, der den q-Parameter benötigt, um den Wert zu erhalten. –

Verwandte Themen