Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax 防止主干集在保存后验证_Ajax_Validation_Backbone.js_Save_Set - Fatal编程技术网

Ajax 防止主干集在保存后验证

Ajax 防止主干集在保存后验证,ajax,validation,backbone.js,save,set,Ajax,Validation,Backbone.js,Save,Set,我尝试在主干模型上进行客户端验证,该主干模型涉及对服务器的ajax调用,以确定新条目是否与现有条目重复(通过匹配标题确定)。这是步骤 检查型号是否为新型号 如果是新的,AJAX将从validate()获取,以查看模型是否已经存在(按标题) 如果响应=重复设置状态无效,则继续执行save() 我遇到的问题是主干网正在执行以下操作 保存() validate():获取不重复的返回 验证已通过,set() validate():GET返回重复的 我的问题是如何防止第二个validate()在集合上触发

我尝试在主干模型上进行客户端验证,该主干模型涉及对服务器的ajax调用,以确定新条目是否与现有条目重复(通过匹配标题确定)。这是步骤

  • 检查型号是否为新型号
  • 如果是新的,AJAX将从
    validate()
    获取,以查看模型是否已经存在(按标题)
  • 如果响应=重复设置状态无效,则继续执行
    save()
  • 我遇到的问题是主干网正在执行以下操作

  • 保存()
  • validate():获取不重复的返回
  • 验证已通过,set()
  • validate():GET返回重复的
  • 我的问题是如何防止第二个
    validate()
    在集合上触发,因为它触发了另一个GET请求,并且我得到了一个错误响应,即使从技术上讲,我已经“完成”了保存

    要保持简短,这里是验证和保存调用

    List=Backbone.Model.extend({
    idAttribute:“\u id”,
    urlRoot:“/api/lists”,
    ...
    验证:函数(attrs){
    //如果我们正在编辑,请不要为此烦恼(现在)
    if(this.isNew()){
    //查看此标题是否已存在
    var结果=“”;
    $.ajax({
    url:“/api/lists/”+this.generateTileKey(attrs.title),
    键入:“获取”,
    async:false,
    成功:功能(数据){
    结果=数据;
    }
    });
    如果(result.length>0){
    返回{
    字段:“标题”,
    errMsg:“您已经拥有此列表”
    };
    }
    }
    }
    });
    ListView=Backbone.View.extend({
    ...
    保存:函数(){
    var _self=这个;
    变量字段={
    标题:_self.$el.find('input[name=“new list name”]”)val()
    }
    _self.resetErrors();
    _self.model.save(字段、{
    等等:是的,
    沉默:是的,
    成功:功能(模型,res){
    如果(res.err){
    //添加用户界面错误
    }否则{
    新的app.View({model:_self.model});
    _self.close();
    }
    },
    错误:函数(模型,res){
    log(“内部错误”);
    }
    })
    }
    });
    app.post('/api/lists',函数(req,res){
    var list=新的ListModel({
    titleKey:generateTitleKey(要求正文标题),
    标题:req.body.title
    });
    返回列表。保存(函数(错误){
    如果(!err){
    返回res.send(列表);
    }否则{
    返回res.status(409).send(JSON.stringify({
    呃:是的,
    errSrc:“列表”,
    错误类型:“插入”,
    这已经是一个列表了
    }));
    }
    });
    });
    
    无声:true似乎对我不起作用,save()和set()都是触发器validate()


    我知道有很多方法可以进行错误处理以进行验证,但我有意尝试使用主干模型所使用的本机valide方法,在我尝试将其用于ajax调用之前,它一直工作得很好。我离这里很近,我能尝到。

    你可以告诉模型不要用
    model.set('something',true,{validate:false})验证集合。仅供参考,如果需要,您可以在
    选项散列中执行相同操作。保存
    选项散列


    你到底在设置什么?通常情况下,服务器响应是要保存在客户机模型上的属性,因此您可以返回该属性上所需的内容,并避免调用set。

    您可以告诉模型不要使用
    model.set('something',true,{validate:false})验证集合。仅供参考,如果需要,您可以在
    选项散列中执行相同操作。保存
    选项散列


    你到底在设置什么?通常情况下,服务器响应是要保存在客户机模型上的属性,因此您可以返回该属性上所需的内容,并避免调用set。

    您可以告诉模型不要使用
    model.set('something',true,{validate:false})验证集合。仅供参考,如果需要,您可以在
    选项散列中执行相同操作。保存
    选项散列


    你到底在设置什么?通常情况下,服务器响应是要保存在客户机模型上的属性,因此您可以返回该属性上所需的内容,并避免调用set。

    您可以告诉模型不要使用
    model.set('something',true,{validate:false})验证集合。仅供参考,如果需要,您可以在
    选项散列中执行相同操作。保存
    选项散列


    你到底在设置什么?通常情况下,服务器响应是您希望保存在客户端模型上的属性,因此您可以返回您需要的属性,避免调用集合。

    Dominic Tobias让我找到了正确的答案


    isNew()
    不能用作检查,因为在服务器的响应中,模型在设置之前已经过验证,因此在验证post save()集时,isNew()在技术上仍然是正确的。我将check-in validate()更改为
    if(attrs.\u id)
    ,一切正常。

    多米尼克·托拜厄斯(Dominic Tobias)给了我正确的答案


    isNew()
    不能用作检查,因为在服务器的响应中,模型在设置之前已经过验证,因此在验证post save()集时,isNew()在技术上仍然是正确的。我将check-in validate()更改为
    if(attrs.\u id)
    ,一切正常。

    多米尼克·托拜厄斯(Dominic Tobias)给了我正确的答案


    isNew()
    不能用作检查,因为在服务器的响应中,模型在设置之前已经过验证,因此在验证post save()集时,isNew()在技术上仍然是正确的。我将check-in validate()更改为
    if(attrs.\u id)
    ,一切正常。

    多米尼克·托拜厄斯(Dominic Tobias)给了我正确的答案

    isNew()
    不能用作检查,因为在服务器的响应中,模型在设置之前已经过验证,因此在验证post save()集时,isNew()在技术上仍然是正确的。我换了房间