2016-05-14 5 views
0

Ich möchte einen Ajax-Aufruf vom Client zum Backend machen. Ich bekomme einen erfolgreichen Anruf von der Erfolgsfunktion, allerdings kann ich nicht nachvollziehen wie ich Daten vom Server bekomme um vom Client zurück zu kommen.AJAX-Aufruf und Erhalten von Rückgabedaten im Knoten

zur Zeit mein Fehler versucht res.send zu verwenden ist:

Error: Can't set headers after they are sent. 

AJAX

function getProfessorResults() { 
     var textData = $('#inputsm').val(); 

     var data = {user:"[email protected]"}; 
     $.ajax({ 
      url: 'http://localhost:3000', 
      data: { theme: "somevalue", snippet: { name: "somename", content: "somevalue" } }, 
      method: 'POST', 
      async: false, 
      cache: false, 
      timeout: 5000, 
      contentType: "application/json", 
      success: function(data) { 
       console.log("success"); 
      }, 
      complete: function(data) { 
      console.log("completed"); 
      }, 
      error: function(jqXHR, textStatus, errorThrown) { 

       alert('Error connecting to the Node.js server... ' + textStatus + " " + errorThrown); 
      } 
     }); 
    } 

JS Backend

exports.home = function(req, res) { 


    function passList(profArray, callback) { 
    setTimeout(function() { 
     callback(profArray); 
    }, 1000); 
    } 


    function getProfs(teacher_name, successCallback) { 

    google.resultsPerPage = 10 
    var nextCounter = 0 

    google(teacher_name, function (err, res){ 
     if (err) console.error(err) 
     var teacher_results = []; //Hold all the teachers returned from the function 
     for (var i = 0; i < res.links.length; ++i) { 
     var link = res.links[i]; 
     if (!link.title.includes('Add') || !link.title.includes('RATINGS') || !link.title.includes("Hint")) { 

      teacher_results.push(link.title); 

     }//End if for comparisons || 
     } //End For 
     successCallback(teacher_results); 
    }); //End google function 
     teacher_results = ['tester1', 'tester2']; 
     successCallback(teacher_results); 
    } //End searchForProfessor 


    getProfs(teacher_name, function(data) { 
    prof_list = data; 
    console.log(prof_list); 
    return true; 
    }); 


    if (req.method == 'POST'){ 
     console.log("true"); 
     // dataReceived = JSON.parse(req); 
     // console.log(dataReceived); 
     var obj = { 
      tid: 'ryan' 
     }; 

     res.send(JSON.stringify(obj)); 
    } 



    res.render('home', { 
    profs: prof_list, 
    dataStuff : dataReceived 
    }); 
}; 
+0

'return' wohin? Müssen Sie mehr über Server-Code-Kontext wissen – charlietfl

+0

Angenommen, ich rufe eine Methode auf der Serverseite. Ich möchte die Daten vom Server zurückgeben, sagen wir eine Zeichenfolge von Daten oder JSON obj, zurück zum Client, damit ich es auf meine Vorlage werfen kann. – CuriousFellow

+0

Sie müssen mehr von Ihrem JS Backend-Code einbeziehen. – JAM

Antwort

2

Im Backend, sollten Sie einige Strecke, wo Ihre AJAX-Anruf landet. Dort können Sie auf Ihre Antwort send aufrufen.

In node.js/Express, würde dies so aussehen wie

app.get('/ajaxURL', function (req, res) { 
    res.send('I want this string to return to the client'); 
}); 

Um die Daten aus dem Frontend zugreifen, greifen Sie in Ihrem AJAX Rückruf:

$.ajax({url: '/ajaxURL'}).done(function (data) { 
    console.log(data); 
}); 
+0

Wie kann ich auf die Daten von res.send in der Ajax-Funktion auf dem Client zugreifen? – CuriousFellow

+0

Sie haben Erfolg Rückruf und es hat Parameterdaten, so können Sie Zugriff erhalten, indem Sie diesen Parameter –

+0

Ich habe eine neue Route erstellt und es funktioniert mit der Rückgabe von Daten, was ist, was ich will. Das Problem, das ich immer noch habe, ist, wenn ich res.send (req.body) mache, sind die Rückkehrdaten leer. Gibt es einen Grund dafür? Sollte es nicht die Daten drucken, die ich von dem ursprünglichen AJAX-Anruf übergeben habe? – CuriousFellow

1

ich nicht der bin immer Kontext richtig, aber Sie können durch dieses Beispiel herausfinden.

Senden von Daten vom Server response.send("Your data"); Zugriff auf diese Daten in der Client-Erfolgsmethode von AJAX: success:function(data){console.log(data)};

Verwandte Themen