Salesforce - $ .ajax调用的成功处理程序

时间:2012-05-14 21:35:37

标签: javascript jquery salesforce

我有一个表单,我一直在向Salesforce提交标准表单提交操作。默认情况下,您可以告诉Salesforce在POST完成后将您重定向到给定的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会返回我的良好的重定向,这将被视为我可以放弃/忽略的“成功”。确实是误导了!

  • 我可以看到200 OK结果(通常意味着“成功”),但成功回调没有被触发。
  • 添加到Salesforce数据库
  • 检查返回内容的内容显示为零;回复中没有内容。
  • 错误回调 IS 被绊倒(尽管200 OK)但是可能由于故意不重定向它被视为“资源不可用”? (因此我的状态代码是0,并且thrownError中没有内容?)。

有关将此识别为成功POST的任何建议,以便我可以在回调中触发其他操作吗?我不想完全忽略响应,或者我最终可能会遇到我正在执行POST失败的情况,就好像它是成功的一样。我需要以某种方式获得成功。

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

2 个答案:

答案 0 :(得分:3)

这里几件事:

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

2)后续页面的响应代码(在重定向之后)是200 OK,来自它的声音。

3)使用JSONP无法执行POST请求。这是JSONP的限制;这实际上不是一个AJAX请求,而是一个包含在动态生成的脚本标记内的HTTP GET请求。此外,JSONP仅在请求产生200 OK的HTTP响应时才有效。

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

答案 1 :(得分:0)

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;

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