【发布时间】:2015-01-06 08:56:57
【问题描述】:
我正在尝试使用 http://support.capsulecrm.com/customer/portal/articles/1639817-website-contact-form-integration 发布 Capsule CRM 页面,我可以很容易地开始工作。但是,我想使用 AJAX 发布此内容,但一直遇到 CORS 错误。 Capsule CRM 人员已将其关闭,因此您无法使用 AJAX 提交而不会遇到此错误。
联系他们后,我得到了这样的回复:
要使用 AJAX 处理您的请求,您的网站需要额外的 将在您的网站上处理您的网络表单 POST 的页面,而不是 直接发送到 Capsule。这有时被称为 AJAX 代理。此页面只是将帖子转发到 Capsule 网络表单 url 对于处理,如果您没有在帖子中指定“COMPLETE_URL” 表单将返回 HTTP 200 响应而不是重定向 对你来说更容易处理。
我花了很大一部分时间在互联网上寻找“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等.. -
你有代码示例吗?我不确定哪些胶囊将支持发布数据?只要它具有这些字段名称(PERSON_NAME、EMAIL 等),它似乎就可以工作。
-
你已经差不多了。 hindmost的评论和回答都不错。术语代理是指充当处理请求的中介的任何软件。在这种情况下,需要中介,因为您不能直接发布 Ajax 请求。因此,将有 2 个与您描述的完全一样的帖子。我可以在您的代码中发现的唯一另一件事是,在您的 JavaScript 中,您需要在 URL 周围加上引号,例如
url: 'capsule.php'
标签: javascript php jquery ajax proxy