2011-08-14 3 views
0

J'essaie d'écrire une petite recherche ajax en direct pour node.js. tout est ici d'abord mon code ClientSide:ajax Appel GET avec node.js/express server

$('#words').bind('keyup', function(){ 
    getMatchingWords($('#words').val(), function (data){ 
     console.log('recieved data'); 
     console.log(data); 
     $('#ajaxresults').show(); 
    }); 
    }); 

function getMatchingWords(value, callback) { 
    $.ajax('http://127.0.0.1:3000/matchword/' + value + '/', { 
     type: 'GET', 
     dataType: 'json', 
     success: function(data) { if (callback) callback(data); }, 
     error : function()  { if (callback) callback(null); } 
    }); 
} 

et ici ist ma route Serverside:

app.get('/matchword/:value', function(req, res) { 
     console.log(req.params.value); 
     res.writeHead(200, {'content-type': 'text/json' }); 
     res.write(JSON.stringify({ test : 'test'})); 
     res.end('\n'); 
}); 

cela fonctionne, mais je ne pas recevoir de données. les données de la fonction de rappel sont toujours nulles. alors qu'est-ce que je fais mal? merci pour l'aide

+0

Vous ne savez pas si cela fait une différence pour node.js mais ne devrait pas être content-type'? Content-Type'? –

+0

non ça n'a pas d'importance –

Répondre

2

Quelle est l'URL à partir de laquelle vous faites la requête $ .ajax()? Si la page contenant ce JS côté client n'a pas été également chargée à partir de 127.0.0.1:3000, l'erreur que vous voyez est due à l'exigence de même origine sur les requêtes AJAX.

7

changement

$.ajax('http://127.0.0.1:3000/matchword/' + value + '/', { 

à

$.ajax('/matchword' + value + '/', { 
+0

thx, que ou vous devez utiliser jsonp en tant que dataType –

+1

arriver à accepter la réponse - partager l'amour SO. – smathy

1

hey mieux tard que jamais ...

Je regardais votre problème parce que je suis également en train de mettre une simple recherche vivre ensemble avec un back.exs express.js. Tout d'abord je mets ton URL dans une variable locale. Comme je ne pense pas que c'était votre problème. En particulier si votre journal express/node affichait une réponse 200. alors l'URL était bien ...

Il semble que votre fonction ne renvoyait pas de données (correct?) si oui, essayez ceci.

var search_url = "..."// your url 

function getMatchingWords(value, callback) { 
    $.ajax(search_url, { 
     type: 'GET', 
     dataType: 'json', 
     success: function (data, textStatus, jqXHR) { 
      var returned_data = data; 
      console.log("returned_data ="+returned_data);//comment out or remove this debug after test 
      callback(returned_data); 
     }, 
     error: function(req, status, err) { 
      console.log('something went wrong', status, err); 
     } 
    }); 
} 

vous pourriez avoir besoin d'ajouter/modifier vos en-têtes sous réserve de la mise en place ...

 headers : { Authorization : auth }, 
     type: 'GET', 
     dataType: 'json', 
     crossDomain:true, 

la variable auth étant une paire auth codée ailleurs dans votre code (si votre service Web nécessite un certain type d'auth ...