跨域ajax表格帖子---这是如何允许的?

时间:2015-06-22 16:13:45

标签: jquery ajax

我正在使用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>

1 个答案:

答案 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