我正在尝试使用http://support.capsulecrm.com/customer/portal/articles/1639817-website-contact-form-integration发布一个Capsule CRM页面,我可以很轻松地工作。但是,我想使用AJAX发布此消息,但一直遇到CORS错误。 Capsule CRM的人员已将其关闭,因此您无法在遇到此错误的情况下使用AJAX提交。

与他们联系后,我得到了以下答复:



在互联网上花费了很大一部分时间来寻找“AJAX代理”之后,我似乎找不到一个示例,并开始努力使其工作。希望一些代码可以解决我的问题。

form.html

<form id="contact-form" class="form">
  <label>Name: </label>
  <input type="text" name="PERSON_NAME" placeholder="Name" value="" required/>
  <label>Email: </label>
  <input type="email" name="EMAIL" placeholder="Email" value="" required  /><br>
  <label>Telephone: </label>
  <input type="text" name="PHONE" placeholder="Telephone number" value="" required /><br>
  <input type="submit" name="submit" value="Submit" />
</form>
<div class="result">
</div>

form.js

$(document).ready(function(){
$('.form').submit(function(event){

    event.preventDefault();
    var messages = $('#result');
    var formData = $('.form').serialize();

    $.ajax({
        type        : "POST",
        url         : capsule.php,
        data        : formData
    })
    .done(function(response) {
            console.log("Success: " + response);
        }
    })
    .error(function(response)   {
            console.log("Error: " + response);
        }
    });
});

capsule.php
<?php
<form action="https://service.capsulecrm.com/service/newlead" method="post">
    <input type="hidden" name="FORM_ID" value="XXXXXXXXXXXXXXXXXXXXXXXX">
    <input type="text" name="FIRST_NAME" value="$_POST['PERSON_NAME']">
    <input type="text" name="LAST_NAME" value="$_POST['PERSON_NAME']">
    <input type="text" name="EMAIL" value="$_POST['PERSON_NAME']">
</form>
?>

我几乎需要做一个双重职位。我需要将数据发布到Capsule.php,然后再发布。如果该响应成功,则将其全部撤消并更新form.html而不刷新。还是有人知道我应该如何形成“AJAX代理”?

这是我第一次深入研究AJAX,所以请轻柔:)。

编辑

在尝试了以下答案并进行调试之后,我将其返回到开发人员工具的控制台中。由于我无权访问Capsules CRM服务器,因此调试起来很困难,因此我目前还向他们发送有关我遇到的问题的电子邮件:
(
    [url] => https://service.capsulecrm.com/service/newlead
    [content_type] =>
    [http_code] => 404
    [header_size] => 315
    [request_size] => 206
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.397695
    [namelookup_time] => 0.045858
    [connect_time] => 0.109964
    [pretransfer_time] => 0.268374
    [size_upload] => 705
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 1772
    [download_content_length] => 0
    [upload_content_length] => 705
    [starttransfer_time] => 0.333441
    [redirect_time] => 0
)

谢谢大家的耐心配合!

最佳答案

您误解了AJAX代理概念。
capsule.php脚本不应包含HTML格式,它应从form.html接收AJAX请求数据,并通过POST请求将其发送/传递到Capsule CRM页面。这可以通过多种方式完成:CURL,file_get_contents()和其他方式。

下面是CURL的实现:

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => 'https://service.capsulecrm.com/service/newlead',
    CURLOPT_NOBODY => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $_POST,
    CURLOPT_SSL_VERIFYPEER => false,
));
$response = curl_exec($ch);
if ($response && curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200)
    return $response;
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');

10-02 17:20