2016-05-14 7 views
0

クライアントからバックエンドにajaxコールを発信したいと考えています。私は成功関数から成功した呼び出しを取得しますが、クライアントから戻るためにサーバーからデータを取得する方法を理解できません。 AJAXをコールし、ノードの戻りデータを取得する

は現在res.sendを使用しようとしている私のエラーは、次のとおりです。

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バックエンドバックエンドで

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'へ:AJAXの成功方法でサーバー response.send("Your data"); あなたのクライアントでアクセスこのデータをからデータを送信

?サーバーコードコンテキストの詳細を知る必要があります – charlietfl

+0

サーバーサイドでメソッドを呼び出すとします。私は、サーバーからのデータを返すようにしたい、データやJSON objの文字列をクライアントに返して、それをテンプレートに投げることができます。 – CuriousFellow

+0

JSバックエンドコードをさらに含める必要があります。 – JAM

答えて

2

、どこで、いくつかのルートを持っている必要がありますあなたのAJAXコールランド。そこには、あなたの応答にsendを呼び出すことができます。 Node.jsの/ Expressで

、これはあなたのAJAXコールバックでアクセス、フロントエンドからのデータにアクセスするには

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

次のようになります。

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

クライアント上のajax関数のres.sendからデータにアクセスするにはどうすればよいですか? – CuriousFellow

+0

成功したコールバックがあり、パラメータデータがあるので、このパラメータを読んでアクセスできます –

+0

私は新しいルートを作成しました。私がまだ持っている問題は、res.send(req.body)を実行すると、戻り値のデータが空白になります。これには理由がありますか?最初のAJAX呼び出しから渡されたデータを出力するべきではありませんか? – CuriousFellow

1

私はなっておりませんコンテキストを適切に設定できますが、この例では把握できます。 success:function(data){console.log(data)};

関連する問題