我正在使用jQuery和jQuery form plugin
jQuery表单插件中有一个方法ajaxSubmit。你传递一个表单,然后通过ajax提交它,你得到一个响应。我想知道这是如何可能的,因为表单位于与网页不同的服务器上。 (不同的域名)。它似乎工作,我得到了我可以处理的回复。这是如何工作的?
域名表单托管在(http://example.com)
上表单网址:127.0.0.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>PHP Point Of Sale</title>
<script src="<?php echo base_url('/assets/js/jquery.js'.'?'.APPLICATION_VERSION); ?>"></script>
<script src="<?php echo base_url('js/jquery.form.js'.'?'.APPLICATION_VERSION); ?>"></script>
</head>
<body>
<form id="formCheckout" method="post" action="<?php echo $form_url; ?>">
<?php foreach($post_data as $key=>$value) { ?>
<?php echo form_hidden($key, $value);?>
<?php } ?>
</form>
<script>
$("#formCheckout").ajaxSubmit({
success: function(response) {
console.log(response);
}
});
</script>
</body>
</html>
答案 0 :(得分:3)
如果服务器的响应标头为'Access-Control-Allow-Origin': '*'
或类似内容,则会返回响应。
简而言之,这与jQuery无关,而且与服务器有关。
在上面的例子中,*
是表示所有来源的通配符。但它也可以指定一个起源列表。
请记住,即使在CORS请求中,您也可以始终向服务器发送请求,服务器将始终收到请求。它只会返回一个响应,如果它想要(在这种情况下,使用访问控制头,它会。)
如果服务器没有该标题,那么您将在控制台中收到XMLHTTPRequest could not complete because the server does not allow cross-origin communication
或其他任何内容的常见错误。
这取决于服务器正在使用的体系结构,但如果它是使用Express的Node.js服务器(例如),您会看到类似这样的内容是server.js
文件或任何地方:
app.use(function(req, res) { res.header('Access-Control-Allow-Origin', '*') });
这种方法在不同的服务器架构(如Apache)上会有很大的不同,但是标头是标准化的一部分,因此该部分保持不变。
有关示例,请参阅AJAX Cross Domain。