Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript http请求后不更新页面(范围问题?)_Javascript_Angularjs_Express - Fatal编程技术网

Javascript http请求后不更新页面(范围问题?)

Javascript http请求后不更新页面(范围问题?),javascript,angularjs,express,Javascript,Angularjs,Express,当我的页面加载时,将显示我的mongo db中的所有项目。我有一个表格来输入新条目,或删除条目。在创建或删除时,http进程工作,但新数据不会在DOM中更新 我研究过的大多数相关问题都建议确保我的ng控制器包裹整个身体,它确实如此。其他人建议使用$apply,但我也读到这是错误的。当我尝试它时,我会被提醒“正在进行” 我唯一的猜测是,在http请求之后,会加载一个新的作用域,angular不会对此进行处理。或者出于某种原因,它只是在我请求后不重新加载数据。这是我的代码,谢谢你的帮助 index.

当我的页面加载时,将显示我的mongo db中的所有项目。我有一个表格来输入新条目,或删除条目。在创建或删除时,http进程工作,但新数据不会在DOM中更新

我研究过的大多数相关问题都建议确保我的ng控制器包裹整个身体,它确实如此。其他人建议使用$apply,但我也读到这是错误的。当我尝试它时,我会被提醒“正在进行”

我唯一的猜测是,在http请求之后,会加载一个新的作用域,angular不会对此进行处理。或者出于某种原因,它只是在我请求后不重新加载数据。这是我的代码,谢谢你的帮助

index.html

<body ng-controller="MainController">

    <!-- list records and delete checkbox -->
    <div id="record-list" class="row">
        <div class="col-sm-4 col-sm-offset-4">
            <!-- loop over records in $scope.records -->
            <div class="checkbox" ng-repeat="record in records">
                <label>
                    <input type="checkbox" ng-click="deleteRecord(record._id)">
                    {{ record.artist}} - {{ record.album }} - {{ record.bpm}}
                </label>
            </div>
        </div>
    </div>
    <!-- record form data -->
    <div id="record-form" class="row">
        <div class="col-sm-8 col-sm-offset-2 text-center">
            <form>
                <div class="form-group">
                    <input type="artist" class="form-control input-lg text-center" placeholder="Artist" ng-model="formData.artist">
                </div>
                <div class="form-group">
                    <input type="album" class="form-control input-lg text-center" placeholder="Album" ng-model="formData.album">
                </div>
                <div class="form-group">
                    <input type="bpm" class="form-control input-lg text-center" placeholder="BPM" ng-model="formData.bpm">
                </div>
                <button type="submit" class="btn btn-primary btn-lg" ng-click="createRecord()">Add</button>
            </form>
        </div>
    </div>
</div>

}])

您的控制器JS看起来很好-我想说的是,当POST/DELETE成功时,您需要从mongoDB集合中导出更新的值

如果您使用Mongoose(mongoDB插件),您可以更新API代码,以便在成功后通过以下方式发回更新后的数据:

// POST
// --------------------------------------------------------
// Provides method for saving new record to the db, then send back list of all records

app.post('/api/records', (req, res) => {

    // Creates a new record based on the Mongoose Schema
    const newRecord= new Record(req.body);

    // New record is saved to the db
    newRecord.save((err) => {

        // Test for errors
        if(err) res.send(err);

        // Now grab ALL data on records 
        const all = Records.find({});
        all.exec((err, records) => {

           // Test for errors
           if(err)  res.send(err);

           // If no errors are found, it responds with JSON for all records
           res.json(records);
        });

    });
});

那么,每个HTTP操作(POST、DELETE)是否都会响应更新的记录数组?此外,
$http
承诺上的
成功
错误
回调也已完成。您是否检查了控制台中的任何错误?请检查请求中的响应标题。如果您能够记录响应,但它没有显示在您的视图中,那么您很可能正在接收内容类型:text/plain,而您应该接收内容类型:application/json。如果是这种情况,您可以更改服务器中的响应头,或者如果您很懒,您可以只执行$scope.records=JSON.parse(data)@菲尔,那是我的问题。我的createRecord函数没有返回更新的记录数组。另外,感谢您通知我有关
success
error
的弃用信息。我已将代码更改为使用
。然后(函数successCallback(response)
。感谢所有其他人的回复。
// POST
// --------------------------------------------------------
// Provides method for saving new record to the db, then send back list of all records

app.post('/api/records', (req, res) => {

    // Creates a new record based on the Mongoose Schema
    const newRecord= new Record(req.body);

    // New record is saved to the db
    newRecord.save((err) => {

        // Test for errors
        if(err) res.send(err);

        // Now grab ALL data on records 
        const all = Records.find({});
        all.exec((err, records) => {

           // Test for errors
           if(err)  res.send(err);

           // If no errors are found, it responds with JSON for all records
           res.json(records);
        });

    });
});