2015-09-11 71 views
0

我很难找出为什么我的AJAX代码在表单提交中发送两次。AJAX jQuery表单提交发送两次POST&OPTIONS

选项请求和POST请求 - 两个状态消息都是200。 POST请求成功并返回我想要的内容,这样很好。我不希望发生OPTIONS请求。

认为它可能与CORS有关或解绑定提交事件处理程序?

如果任何人都可以提供帮助,那就太好了。

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<form id="loginform"> 
     Username: <input type="text" class="rname" name="username" value=""/> 
     Password: <input type="text" class="rpass" name="password" value=""/> 
     <input type="submit" value="Submit" /> 
</form> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script type="text/javascript"> 

scripts = function() { 
    var _t = this; 
    var authenticateUrl = "http://..."; 
    this.events = function() { 
     $('#loginform').submit(_t.loginEvent); 
    }; 
    this.loginEvent = function (event) { 
      event.preventDefault(); 
      var $form = $(this); 

      var _name = $form.find(".rname").val(); 
      var _pass = $form.find(".rpass").val(); 

      var submitData= {username: _name,password: _pass}; 
      submitData = JSON.stringify(submitData); 

      $.ajax({ 
       type: 'POST', 
       contentType: "application/json", 
       dataType: 'json', 
       url: authenticateUrl,  
       data: submitData, 
       success: function(data) { 
        console.log("Success loginEvent"); 
        if (data.error) { 
         console.log("Unsuccessful Login"); 
        } else { 
         console.log("successful Login"); 
        } 
       } 
      }); 
     }; 

    this.init = function() { 
     _t.events(); 
    }; 
    this.init(); 
    return (this); 
}; 

var LZ = new scripts(); 
</script> 
</body> 
</html> 
+0

可能的重复[为什么我得到一个OPTIONS请求,而不是GET请求?](http://stackoverflow.com/questions/1256593/why-am-i-getting-an-options-request-instead-请求的请求) –

回答

0

它没有什么奇怪的,如果你得到正确的答复。

Options请求用于允许客户端确定与资源相关的选项和/或需求或服务器的功能,而不会暗示资源操作或启动资源检索。

OPTIONS请求是我们所说的跨域资源共享(CORS)中的pre-flight请求。

当你在不同的来源提出请求时,它们是必需的。

+0

嗨,队友,谢谢你的回答。有道理,我有点困惑,因为我用POSTMAN和一个正常形式的方法和动作,只有POST状态消息,所以它必须与AJAX请求本身? – roshambo

+0

常规网页可以使用XMLHttpRequest对象从远程服务器发送和接收数据,但它们受限于相同的源策略。扩展不限于此。扩展可以与远程服务器通信,只要它首先请求跨源许可。因此,如果使用POSTMAN,因此它需要预先请求,因为它是分机 – maddygoround

+0

它与服务器有关。 – maddygoround