javascript - 将 JSONP 响应返回到原始函数调用
问题描述
基本上,我正在尝试使用 JSONP 进行跨域 AJAX 调用。JS 和 PHP 文件需要位于不同的域中。我似乎无法将返回的数据恢复到原始函数。
解释页面是如何工作的。用户将在输入框中输入一些内容。例如姓氏。
用户单击搜索后,将调用 searchClick() 函数。此函数获取用户已插入输入框的文本并调用另一个名为 的函数getInfo()
。
function searchClick() {
var jsonOfData = getInfo($('#searchInput').val());
console.log(jsonOfData );
}
该getInfo()
函数必须位于不同域的 JS 文件中。
function getInfo(surname) {
$.ajax({
url: "https://www.otherdomain.com/api/lookup.php",
dataType: 'jsonp',
crossDomain: true,
data: {
surname: surname
},
success: (data) => {
console.log(data); // This works
return data; // This doesn't
}
});
}
这个 ajax 调用转到我的 PHP 页面并在数据库上进行搜索。然后它创建了一个 JSON 数组并将其发回。根据我的研究,我没有以通常的方式结束文件,而是以以下方式echo json_encode($array);
结束文件:
echo $_GET['callback'] . "(" . json_encode($responseArr) . ")";
这就是我遇到问题的地方。如您所见,在 AJAX 成功函数中,数据已成功显示并记录到控制台,但我无法将其返回到原始jsonOfData
变量。
我希望这是有道理的,我会非常感谢任何可以帮助我的人。
解决方案
您尝试执行的操作将不起作用,因为$.ajax
调用是异步进行的。
此时不要使用函数调用的返回:
var jsonOfData = getInfo($('#searchInput').val());
尝试在调用success
函数中构建逻辑$.ajax
。
推荐阅读
- tensorflow - Sci-kit Learn Confusion Matrix:发现样本数量不一致的输入变量
- facebook - Facebook Graph API - 图片帖子未显示在页面新闻提要上
- r - 控制透视网格瓷砖边框颜色
- python - 使用 tensor-rt 从 python 到 c++ 实现预训练的 tensorflow 神经网络的工作流程是什么?
- javascript - 如何将“选择”下拉列表中的文本值设置为“输入”文本字段?
- angular - 在Angular 6的组件中拥有一个类作为@Input或属性
- android - React Native - 如何为我的应用程序创建 URL 方案?
- javascript - 如何在 Date Picker Materialize 中添加事件日期?
- angular - 寻找(未知 url)的 Http 失败响应的解决方案:0 未知错误
- python-3.x - 如何使用python计算文本文件中的特定字符?