Backbone 期望 JSON 作为默认响应格式。当你得到一个整数时,我怀疑,主干$.parseJSON()
在数字上使用 jquery 并将它作为有效的 JSON 返回,而它不是。
如果您想返回多个错误消息,我建议您将它们放入数组的单独字段中并对其进行编码,然后作为响应发送到主干。
编辑
刚刚检查了主干源代码,它并没有$.parseJOSN()
与上面的猜测相反。
编辑 2
假设您有以下 PHP 代码(尽管我想创建一个与框架无关的示例,但这是可能的,但使用框架会更快更顺畅,所以我选择了Slim)。
当您保存模型时,主干使用 POST 作为方法将数据发送到服务器。在 Slim 中,这将转化为以下内容:
$app = new \Slim\Slim();
$app->post('/authors/', function() use($app) {
// We get the request data from backbone in $request
$request = $app->request()->getBody();
// We decode them into a PHP object
$requestData = json_decode($request);
// We put the response object in $response : this will allow us to set the response data like header values, etc
$response = $app->response();
// You do all the awesome stuff here and get an array containing data in $data //
// Sample $data in case of success
$data = array(
'code' => 200,
'status' => 'OK',
'data' => array('id'=>1, 'name' => 'John Doe')
);
// sample $data in case of error
$data = array(
'code' => 500,
'status' => 'Internal Server Error',
'message' => 'We were unable to reach the data server, please try again later'
);
// Then you set the content type
$app->contentType('application/json');
// Don't forget to add the HTTP code, Backbone.js will call "success" only if it has 2xx HTTP code
$app->response()->status( $data['code']);
// And finally send the data
$response->write($data);
我使用 Slim 只是因为它可以完成工作并且所有内容都应该像英语一样阅读。
如您所见,Backbone 需要 JSON 格式的响应。我刚刚在我的一个网站上进行了测试,如果您发送不同于 2xx 的 HTTP 代码,Backbone 实际上会调用error
而不是success
. 但浏览器也会捕获该 HTTP 代码,所以要小心!
删除信息
骨干parse
功能也将期待 JSON!假设我们有这个集合:
var AuthorsCollection = Backbone.Collection.extend({
initialize: function( models, options ) {
this.batch = options.batch
},
url: function() {
return '/authors/' + this.batch;
},
// Parse here allows us to play with the response as long as "response" is a JSON object. Otherwise, Backbone will automatically call the "error" function on whatever, say view, is using this collection.
parse: function( response ) {
return response.data;
}
});
parse
允许您检查响应,但不接受 JSON 以外的任何内容!