编辑:因此,在与此作斗争几天后,我将发布我的最终解决方案,这可能会帮助其他尝试使用 JSONP 与 Pardot 进行通信的人。这是一个三部分的问题:
- 向 Pardot 表单处理程序发送 JSONP 请求
- 将 Pardot 表单处理程序成功/错误重定向到您自己的服务器
- 从您的服务器返回 JSONP
从处理程序向 Pardot 发送 JSONP 请求
要将表单数据发送到表单处理程序,您需要对字段名称和值进行 URI 编码。
(使用 JQuery 的示例。在指定 dataType 时,ajax() 添加了 '?callback=':'jsonp'):
var data = { 'field1' = 'value1', 'field' = 'value2' };
var uriEncodedParams = $.param(data);
var targetUrl = <Pardot Form Handler URL> + '?' + uriEncodedParams;
$.ajax({
url: targetUrl,
dataType: 'jsonp',
jsonpCallback: 'callback'
});
window.callback = function (data) {...}
将 Pardot 从处理程序成功/错误重定向到您自己的服务器
请参阅@nickjag 的回答:
将成功位置和错误位置设置为后端的端点。
由于 pardot 不会转发您传入的任何 GET 参数,因此您必须在回调函数名称上使用一些默认值(因此指定 jsonpCallback 并且在我的请求中没有成功)。
从您的服务器返回 JSONP
我在使用时遇到了控制台错误(Uncaught SyntaxError: Unexpected token :
)的问题:
return "{ 'result' : 'success' }"
因为它是一个 JSON 对象,而 JSONP 需要一个带有 JavaScript 的文件。所以返回的格式应该是:return "callback({ 'result' : 'success' })"
同样,Pardot 不转发 GET 参数,从 JQuery 生成的回调函数名称没有传播,我无法返回正确的 JavaScript 代码。如果未提供,则默认使用函数名称“回调”。
从 .NET MVC 后端返回 JSONP 的指南