Javascript 过账至Capsule CRM和;AJAX代理;
我试图发布一个胶囊CRM页面,使用它我可以很容易地工作。然而,我想使用AJAX发布这篇文章,但一直遇到CORS错误。Capsule CRM的人已经关闭了这一功能,因此如果没有遇到此错误,您就无法使用AJAX提交 在与他们接触后,我得到了这样的回应: 要使用AJAX处理您的请求,您的网站将需要额外的 将在您的网站上处理您的webform帖子而不是 直接送到太空舱。这有时被称为AJAX 代理此页面只是将文章转发到Capsule Web表单url上 对于处理,如果您没有在帖子上指定“完整的URL” 表单将返回HTTP 200响应,而不是重定向以使其生效 对你来说更容易处理 我花了很大一部分时间在互联网上寻找“AJAX代理”,但似乎找不到一个例子,并且开始努力让它工作。希望一些代码能帮助我解决这个问题 form.html capsule.phpJavascript 过账至Capsule CRM和;AJAX代理;,javascript,php,jquery,ajax,proxy,Javascript,Php,Jquery,Ajax,Proxy,我试图发布一个胶囊CRM页面,使用它我可以很容易地工作。然而,我想使用AJAX发布这篇文章,但一直遇到CORS错误。Capsule CRM的人已经关闭了这一功能,因此如果没有遇到此错误,您就无法使用AJAX提交 在与他们接触后,我得到了这样的回应: 要使用AJAX处理您的请求,您的网站将需要额外的 将在您的网站上处理您的webform帖子而不是 直接送到太空舱。这有时被称为AJAX 代理此页面只是将文章转发到Capsule Web表单url上 对于处理,如果您没有在帖子上指定“完整的URL” 表
谢谢大家的耐心 您误解了AJAX代理的概念
capsule.php
脚本不应该包含表单HTML,它应该从form.HTML
接收AJAX请求数据,并通过POST请求将其发送/传递到capsule CRM页面。这可以通过多种方式实现:CURL、file\u get\u 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');
您对AJAX代理概念理解不正确
capsule.php
脚本不应该包含html表单,它应该从form.html
接收AJAX请求数据,并通过POST请求将其发送/传递到capsule CRM页面。这可以通过多种方式实现:CURL、file\u get\u contents
和其他方法。您有任何代码示例吗?我不知道什么胶囊将支持张贴的数据?只要它有那些字段名(人名、电子邮件等),它似乎就可以工作。你几乎已经做到了s的评论和回答都很好。术语代理是指作为处理请求的中介的任何软件。在这个场景中,需要中介,因为您不能直接发布Ajax请求。因此,将有2个职位完全如你所描述的。我能在代码中发现的另一件事是,在JavaScript中,您需要在URL周围加引号,例如URL:'capsule.php'
我已经尽我所能实现了这一点(即我已经复制、粘贴并将所有字段移动到我需要的实际形式)但是,在本地测试时,我得到:XMLHttpRequest无法加载文件:PATHTOFILE/capsule.php。跨源请求仅支持协议方案:http、数据、chrome扩展、https、chrome扩展资源。这就是我一开始想要避免的。有什么建议吗?@kirisutranza AFAIU,您正在将您的网页作为本地文件加载(通过文件://
协议),这就是问题的原因。AJAX请求在本地文件上不起作用。您的网页应该可以通过http协议访问。所以你必须把它放在网络服务器上啊,好吧,我想我在测试上有点过早。今晚我可以访问我的Web服务器时,我将尝试使用它。感谢您的耐心@hindmostI现在已经成功地将它放到了我的服务器上。但是,行标题($_SERVER['SERVER_PROTOCOL'.'404 Not Found');这就是我得到的。(即控制台出现404错误。我将其更改为403,并显示禁止等)无论如何,我可以用什么方法调试它?@kirisutranza添加这一行print\r(curl\u getinfo($ch))代码>到脚本
$('.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);
}
});
});
<?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>
?>
(
[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
)
$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');