javascript - 使用 AJAX 从另一个网站获取数据
问题描述
我有一个包含两个下拉“诊所”和“服务”的表格。现在“服务”下拉菜单将根据“诊所”下拉菜单的变化而更新。
现在“服务”和“诊所”的数据存储在另一个网站数据库中。
我已经使用 cURL 获取了“诊所”数据。但由于我必须在运行时更新“服务”下拉列表,这就是我尝试使用 AJAX 获取“服务”数据的原因。
HTML
<form method="post">
<div class="chosen-select-single mg-b-20">
<label><b>Select Clinic : </b></label>
<select data-placeholder="Choose a Clinic..." class="chosen-select" tabindex="-1" name="clinic" id="clinic_id">
<option value="">Select One</option>
<?php foreach($clinic_datum as $data) { ?>
<option value="<?php echo $data->id;?>"><?php echo $data->name?></option>
<?php } ?>
</select>
<?php if($clinicErr != "") { ?>
<span class="error">* <?php echo $clinicErr;?></span>
<?php } ?>
</div>
</form>
AJAX
jQuery("#clinic_id").change(function() {
var clinic_id = $('#clinic_id').val();
if(clinic_id.trim() != '') {
jQuery.ajax({
url: "http://www.sencare.com.bd/service_data_curl",
type: 'GET',
dataType: 'jsonp',
data: {clinic_id : clinic_id},
success: function(msg) {
console.log('msg');
}
});
}
});
但我得到这个错误
跨域读取阻止 (CORB) 阻止了 MIME 类型 text/html的跨域响应http://www.sencare.com.bd/service_data_curl?callback=jQuery1113005791399070777792_1542690562198&clinic_id=2&_=1542690562199 。有关详细信息,请参阅https://www.chromestatus.com/feature/5629709824032768
如何解决这个问题...有人帮忙吗?
解决方案
当您从第三方 API 动态加载数据时,您应该将 ajax 请求的目标 url 更改为您自己域上的脚本,并像最初一样通过 curl 获取数据。然后将其退回并正常处理。你可能不需要 jsonp ——只要普通的 json 就可以了。
理论上,如果您有权将 CORS 标头添加到 sencare.com,您可以通过在 Apache 配置文件中执行以下操作来允许 ajax 请求:
Access-Control-Allow-Origin: https://{your-website-url}
但是,在大多数情况下,您会希望使用自己的脚本简单地处理服务器端的事情,因为这提供了更高的稳定性、灵活性,甚至是一种方便的方式来验证和清理 API 吐出的任何内容。
推荐阅读
- flask-sqlalchemy - 数据库问题“无法从字符串解析 rfc1738 URL”
- javascript - 'v-if' 添加到 'return' 函数时不起作用。为什么?
- c++ - 为什么 spi.recieve() 函数总是在 mbed 的 SPI 中返回零?
- php - 如何从 HTML 注释标签中删除缩进或空格?
- loops - go lang + snmp in lool(错误连接处理)
- c# - C# Json.NET 将字符串转换为 JSON 键
- php - Symfony 4如何使用数据库测试
- c++ - 将字母数字字符串 [z] 转换为其 ASCII 值以及用相应整数替换字符串不起作用
- unity3d - 儿童动画师不播放动画
- c# - OnTriggerEnter() 在开始时被调用