【发布时间】:2020-07-01 00:37:38
【问题描述】:
我有一个使用 Gatsby 创建的网站。其中一个页面上有一个表单,它需要发布到不支持 CORS 但支持 JSONP 的端点。
我已经使用jsonp 编写了这样的事件处理程序:
const handleSumbit = async event => {
event.preventDefault()
jsonp(
"https://go.pardot.com/form/id/code/",
{
timeout: 10000,
params: {
firstname: "fname",
lastname: "lname",
email: "an@email.com",
company: "company",
},
},
(err, data) => {
console.log({ err }, { data })
}
)
}
基于this 的帖子,我在我的网站上创建了两个静态文件,分别名为error.json 和success.json。我在两者中都尝试过这样的内容:
cb({"status":"succcess"})
只是
{"status":"success"}
我总是在控制台中收到一个错误,说请求超时,如果我将结果包装在 jsonpCb() 中,我也会收到一个说 Uncaught ReferenceError: jsonpCb is not defined。我认为它工作了一半,因为它正在尝试运行该功能,并且正在保存表单数据。在我的 React 组件中,我创建了一个名为 jsonpCb 的函数,就是这样:
const jsonpCb = data => {
console.log("fromJsonCb", { data })
}
但由于 React 打包的方式,我觉得结果不可用。
有人知道我如何才能真正获得 JSONP 调用返回的结果吗?
【问题讨论】:
-
jsonp函数从何而来? -
对不起,这是 NPM 上的 jsonp 模块 [npmjs.com/package/jsonp]
-
尝试将cb全局定义为
window.jsonpCb = (data) ... -
@McB,这个答案对你仍然有用吗?我基本上处于同样的困境,但我不明白答案是如何工作的。对我来说,我还在 Pardot 中设置了成功和错误重定向 URL。我和你基本一样,但我无法从文件中读取响应。我什至无法确定返回了什么文件。我在“网络”选项卡中看到这些文件,因此它们确实登陆了我的浏览器,但我无法访问它们的内容。您不介意分享任何见解或回购吗?
标签: reactjs jsonp gatsby pardot