Javascript Salesforce-美元.ajax调用的成功处理程序

Javascript Salesforce-美元.ajax调用的成功处理程序,javascript,jquery,salesforce,Javascript,Jquery,Salesforce,我有一个表单,我一直在使用标准表单提交操作提交给Salesforce。默认情况下,您可以告诉Salesforce在文章完成后将您重定向到给定的URL 我不再希望被重定向,因为我在表单页面上有其他活动。没问题,我的页面已经在使用jQuery,因此我可以像这样使用方便的$.ajax实用程序: $('#wrapper').on('click', '#formsubmit', function(e) { e.preventDefault(); var formData = $('#su

我有一个表单,我一直在使用标准表单提交操作提交给Salesforce。默认情况下,您可以告诉Salesforce在文章完成后将您重定向到给定的URL

我不再希望被重定向,因为我在表单页面上有其他活动。没问题,我的页面已经在使用jQuery,因此我可以像这样使用方便的$.ajax实用程序:

$('#wrapper').on('click', '#formsubmit', function(e) {
    e.preventDefault();

    var formData = $('#subForm').serialize();
    $.ajax({
      type: "POST",
      url: "https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8",
      data: formData,
      success: function() {
        console.log('success!'); // or not!
      },
      error:function (xhr, ajaxOptions, thrownError){
                    console.log(xhr.status); // 0
                    console.log(thrownError); // empty
                }
    });
});
在我被误导的大脑中,我想象Salesforce会返回我良好的ol'重定向,这将算作“成功”,我可以放弃/忽略它。真是误入歧途

  • 我可以看到一个200 OK的结果(通常意味着“成功”),但成功回调没有被触发
  • 潜在客户将添加到Salesforce数据库中
  • 检查返回内容显示为零;响应中没有内容
  • 错误回调被触发(尽管200 OK),但可能是由于故意不重定向,它被视为“资源不可用”?(因此我的状态代码是0,thrownError中没有内容?)
有什么建议可以将这篇文章识别为成功的文章,这样我就可以在回调中触发其他操作了吗?我不想完全忽略回复,否则我可能会陷入这样一个场景:我正在处理一篇失败的文章,好像它是成功的一样。我需要以某种方式捕捉成功

我突然想到,这也可能是一个跨站点脚本问题,但由于应用程序不在JSONP中交换数据,我不知道如何解决这个问题(我也不知道如何首先识别它)

其中,var响应将包含ajax调用的返回值

1) salesforce的API发送的重定向响应很可能被解释为错误代码

2) 从声音上看,后续页面(重定向后)的响应代码是200 OK

3) 使用JSONP进行POST请求是不可能的。这是JSONP的一个局限性;它实际上不是一个AJAX请求,而是一个包装在动态生成的脚本标记中的HTTP GET请求。此外,只有当请求产生200OK的HTTP响应时,JSONP才起作用


我建议您使用自己的服务器端中介来处理AJAX POST请求。这将充当前端应用程序和salesforce API之间的代理。这还可以让您更好地控制发送到应用程序的响应。

谢谢,C.Hill。我从未想过将服务器端用作ITERMEDIALY。。。我必须承认,到目前为止,我还没有实现这一点;我将尝试颠倒事件顺序,看看是否可以先执行其他活动(尽管我认为我会遇到相同的跨站点问题;主要的附加活动是一个固定的联系人订阅;他们的API可能也不会返回CORS头);尽管如此,很明显这是一个很好的方法,所以我现在就开始接受答案,这样我就不会忘记。这是一个空字符串,我也可以通过查看控制台来确认。通过谷歌搜索可以得出以下结论:基于此,除了flash,salesforce目前很可能不支持跨来源共享。我建议使用服务器端页面为您发出请求,直到salesforce api返回正确的CORS头。感谢您的研究,Kevin。我想你和C.希尔有点心中有数。一旦返回了正确的标题,你就可以使用上面的帖子了。
var formData = $('#subForm').serialize();
   var response = $.ajax({
      type: "POST",
      url: "https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8",
      data: formData,
      success: function() {
        console.log('success!'); // or not!
      },
      error:function (xhr, ajaxOptions, thrownError){
                    console.log(xhr.status); // 0
                    console.log(thrownError); // empty
                }
    }).responseText;