我有一个表单,我一直在向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会返回我的良好的重定向,这将被视为我可以放弃/忽略的“成功”。确实是误导了!
有关将此识别为成功POST的任何建议,以便我可以在回调中触发其他操作吗?我不想完全忽略响应,或者我最终可能会遇到我正在执行POST失败的情况,就好像它是成功的一样。我需要以某种方式获得成功。
我想到它也可能是一个跨站点脚本问题,但由于应用程序不会在JSONP中交换数据,我不知道如何解决这个问题(我不知道如何首先确定它。)
答案 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调用的返回值