2011-08-14 28 views
0

node.jsの小さなajaxライブ検索を作成しようとしていますまず第一に、ここでは、私のクライアント側のコードです:それは動作しますが、私はすべてのデータを受け取るドントajax node.js/expressサーバでGET呼び出し

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'); 
}); 

$('#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); } 
    }); 
} 

、ここでは私のサーバー側のルートをイスト。コールバック関数のデータは常にnullです。私は間違って何をしているのですか?ヘルプのthx

+0

これはnode.jsに違いがありますが、 'content-type'は 'Content-Type'ではないのかどうか分かりませんか? –

+0

いいえ、それは問題ありません –

答えて

2

$ .ajax()リクエストを作成しているURLは何ですか?そのクライアントサイドJSを含むページが127.0.0.1:3000からもロードされていない場合、表示されているエラーはAJAXリクエストでの同じ起源の要件によるものです。

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

変更

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

私も一緒に簡単なライブサーチを入れしようとしていますので、私はあなたの問題を見ていたことはありません...

よりちょっと良く後半express.jsバックエンドで

まず、あなたのURLをローカル変数に入れます。私はそれがあなたの問題だとは思わないので。 特にエクスプレス/ノードログに200応答が表示されていた場合。 URLは正常でした...

これは、あなたの関数がデータを返していないようです(正しい?)これを試してください。

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); 
     } 
    }); 
} 
あなたはまた、追加/設定の対象とあなたのヘッダーを変更する必要があります

...

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

Webサービスならば(あなたのコードのどこかエンコードされた認証ペアである認証変数...

+0

thx、thatそれとも、dataTypeとしてjsonpを使用する必要があります。 –

+1

Do not for答えを受け入れる - SO愛を分かち合う。 – smathy