2016-03-21 2 views
1
render: function(){ 
console.log(this.state.search_results); 
var renderedSearchResults = this.state.search_results.map((result) => { 

В console.log печатает:this.state.search_results.map не является функцией, но это массив

[{ "ID": "testGroup2"}, { "идентификатор": " testGroup77777 "}, {" идентификатор ": "testGroup1"}, {" идентификатор ": "testGroup3"}]

данные получены через:

$.ajax({ 
     url: this.props.routes.search, 
     contentType: 'application/json', 
     type: 'POST', 
     data: JSON.stringify(searchObj), 
     success: function(data){ 
      console.log(data); 
      this.setState({search_results:data}); 
     }.bind(this), 
     error: function(xhr, status,err){ 
      console.error("/api/response", status, err.toString()); 
     }.bind(this) 
     });``` 

через:

def post(self): 
    """ 
    Makes a request to search for a specific 
    searchtype: Group 
    searchstring: "" 
    requestedfields: [] 
    """ 
    search_type = self.json_data.get('searchtype', 'Group') 
    search_string = self.json_data.get('searchstring', '') 
    requestedfields = self.json_data.get('requestedfields', ['id']) 
    search_model = { 
     'Group': Group(), 
     'User': User() 
    }[search_type] 
    search_fields = { 
     'Group': ['id', 'tags'], 
     'User': ['username'] 
    }[search_type] 
    # check if requestedfields contains valid fields 
    for field in requestedfields: 
     if field == 'id': 
      continue 
     value = search_model.default().get(field, None) 
     if value is None: 
      return self.set_status(400, "Model {0} does not have requested field {1}".format(search_type, field)) 
    try: 
     search_results = search_model.search_items(search_string, search_fields, requestedfields) 
    except err: 
     return self.set_status(400, "Something went wrong") 
    self.set_status(200, "Success") 
    return self.write(tornado.escape.json_encode(search_results)) 

Я действительно смущен относительно того, как this.state.search_results не является массивом, с которым я могу перебирать, может ли кто-нибудь увидеть, что происходит?

Я попытался с помощью console.log(Object.prototype.toString.call(data)); внутри функции успеха, и я получаю:

[object String] 
+0

попробуйте использовать JSON.parse (данные) и посмотрите, что вы получаете. –

+0

@jamesemanon Я нашел это, я не указывал dataType в моем запросе ajax –

ответ

1

Попробуйте установить json тип данных в явном виде, при этом ваш запрос Ajax:

$.ajax({ 
    dataType: 'json', 
    //... 
}); 

Скорее всего Intelligent Guess, который используется для определения типа данных, JQuery, это дает неверный результат.

0

Найдено мой ответ, не ставил DATATYPE: «» в JSON моей просьбе AJAX.

Смежные вопросы