Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过账至Capsule CRM和;AJAX代理;_Javascript_Php_Jquery_Ajax_Proxy - Fatal编程技术网

Javascript 过账至Capsule CRM和;AJAX代理;

Javascript 过账至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” 表

我试图发布一个胶囊CRM页面,使用它我可以很容易地工作。然而,我想使用AJAX发布这篇文章,但一直遇到CORS错误。Capsule CRM的人已经关闭了这一功能,因此如果没有遇到此错误,您就无法使用AJAX提交

在与他们接触后,我得到了这样的回应:

要使用AJAX处理您的请求,您的网站将需要额外的 将在您的网站上处理您的webform帖子而不是 直接送到太空舱。这有时被称为AJAX 代理此页面只是将文章转发到Capsule Web表单url上 对于处理,如果您没有在帖子上指定“完整的URL” 表单将返回HTTP 200响应,而不是重定向以使其生效 对你来说更容易处理

我花了很大一部分时间在互联网上寻找“AJAX代理”,但似乎找不到一个例子,并且开始努力让它工作。希望一些代码能帮助我解决这个问题

form.html capsule.php
谢谢大家的耐心

您误解了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');