2013-05-15 67 views
0

我正在查詢使用javascript和REST API按名稱搜索節點的Neo4j數據庫。在提交查詢Firebug控制檯顯示錯誤400「錯誤的請求」有以下幾點: 「消息」:「你必須提供‘查詢’參數」, 「異常」:「BadInputException」,錯誤400「錯誤請求」neo4j REST API javascript

以下是我用來提交查詢的功能。當在「search_query」上發出警報時,語法看起來是正確的,字符串化的「queryObject」是有效的JSON。謝謝你幫助我理解爲什麼會發生這種情況,以及如何解決這個問題。

~~~~ 注:剛拿到這款使用工作:

data:{ 
      "query":"start n = node(*) WHERE n.name =~ '" + search_name + ".*' return n order by n.name asc", 
      "params":{} 
     }, 

~~~~

<script> 
function name_search() 
{ 
var queryObject = new Object; //declare object to hold query and parameters 

var search_name = document.getElementById("name_search").value; //get node name search term from user input 
search_name = "'"+search_name+".*'"; //append ".*" to search on Regular Expression 
//alert("search: " + search_name); 

search_query = 'start n = node(*) WHERE n.name =~ ' + search_name + ' return n order by n.name asc'; //create query 

queryObject.query = search_query; //insert query string in queryObject 

queryObject.params = {}; //empty object = no query parameters 

alert(JSON.stringify(queryObject)); 

var restServerURL = "http://localhost:7474/db/data"; //local copy on windows machine 

$.ajax({ 
     type:"POST", 
     url: restServerURL + "/cypher", 
     accepts: "application/json", 
     dataType:"json", 
     data:JSON.stringify(queryObject), //convert queryObject to JSON for inserting into database 
     success: function(data, xhr, textStatus){ 
     //process query results 
     $('#query_results').empty(); //clear div that will contain results 
     var length = data.data.length; //capture number nodes returned 
     //alert("number of nodes: " + length); 
     $('#query_results').append($('<p>').html('number of nodes: ' + length + '<br />')); 

     for (var u = 0; u < length; u++){ 
      var num_props = Object.keys(data.data[u][0].data).length;//get number of node properties from length of data.data.data child property in JSON 
      var node_num = data.data[u][0].self;//get node number from data.data.self and 
      node_num = node_num.replace(restServerURL+"/node/","");//strip restServerURL+"/node/" from result 
      //alert("Node "+ node_num + " has: "+ num_props + " properties"); 
      $('#query_results').append($('<p>').html('Node '+ node_num + ' has: '+ num_props + ' properties' + '<br />')); 
      for (var v = 0; v < num_props; v++){ 
       var prop = (Object.keys(data.data[u][0].data))[v];//get property name key 
       var val = data.data[u][0].data[prop]; //use property name to get value 
       //alert("prop: " + prop +" value: " + val); 
       $('#query_results').append($('<p style="text-indent: 1em;">').html('prop: ' + prop +' value: ' + val + '<br />')); 
      }    
     }; 
     }, 
     error:function(jqXHR, textStatus, errorThrown){ 
         alert(errorThrown); 
     } 
}); 

}//end of search for node by name 
</script> 

回答

0

數據類型JSON執行轉換本身,所以你必須提供對象在那裏。你也注意到了。

我會強烈建議您在查詢中使用n.name =~{search_name}參數,然後只傳遞

{query: ...,params: { search_name: search_name+".*"}} 
+0

感謝您的幫助。爲什麼你建議設置n.name =〜{search_name}並在參數中傳遞搜索詞? – JeffA