this.state.search_results.map 不是函数而是数组

this.state.search_results.map is not a function but it's an array

render: function(){
console.log(this.state.search_results);
var renderedSearchResults = this.state.search_results.map((result) => {

console.log 打印:

[{"id": "testGroup2"}, {"id": "testGroup77777"}, {"id": "testGroup1"}, {"id": "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]

找到我的答案,没有在我的 ajax 请求中设置数据类型:"json"。

尝试以明确的方式设置 json 数据类型,同时执行您的 ajax 请求:

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

jQuery 用来检测数据类型的 Intelligent Guess 很可能给出了错误的结果。