javascript - php文件的代码未通过ajax调用执行
问题描述
我的 PHP 文件中有一个按钮,当我单击该按钮时,我希望运行另一个 PHP 文件并将一些数据保存在 MySQL 表中。为此,我正在使用此链接中建议的 AJAX 调用(如何通过单击按钮调用 PHP 函数),这是 StackOverflow 本身的答案。
这是我试图从中执行另一个 PHP 文件的代码的 show_schedule 文件:
$('.edit').click(function() {
var place_type = $(this).attr("id");
console.log(place_type);
$.ajax({
type: "POST",
url: "foursquare_api_call.php",
data: { place_type: place_type }
}).done(function( data ) {
alert("foursquare api called");
$('#userModal_2').modal('show');
});
});
这里的“编辑”是按钮的类,并且该按钮的 id 正在控制台中正确打印。
这是我的foursquare_api_call.php文件(单击按钮时应该运行):
<?php
session_start();
include('connection.php');
if(isset($_POST['place_type'])){
$city = $_SESSION['city'];
$s_id = $_SESSION['sid'];
$query = $_POST['place_type'];
echo "<script>console.log('inside if, before url')</script>";
$url = "https://api.foursquare.com/v2/venues/search?client_id=MY_CLIENT_ID&client_secret=MY_CLIENT_SECRET&v=20180323&limit=10&near=$city&query=$query";
$json = file_get_contents($url);
echo "<script>console.log('inside if, after url')</script>";
$obj = json_decode($json,true);
for($i=0;$i<sizeof($obj['response']['venues']);$i++){
$name = $obj['response']['venues'][$i]['name'];
$latitude = $obj['response']['venues'][$i]['location']['lat'];
$longitude = $obj['response']['venues'][$i]['location']['lng'];
$address = $obj['response']['venues'][$i]['location']['address'];
if(isset($address)){
$statement = $connection->prepare("INSERT INTO temp (name, latitude, longitude, address) VALUES ($name, $latitude, $longitude, $address)");
$result = $statement->execute();
}
else{
$statement = $connection->prepare("INSERT INTO temp (name, latitude, longitude) VALUES ($name, $latitude, $longitude)");
$result = $statement->execute();
}
}
}
?>
控制台中没有任何 console.log 记录,并且“临时”表也没有更新。谁能告诉我我在哪里犯错?或者甚至可以像这样执行 PHP 文件的代码?
解决方案
您的 JavaScript 正在向执行您的 PHP 程序的 URL 发出 HTTP 请求。
当它得到响应时,您执行以下操作:
.done(function( data ) { alert("foursquare api called"); $('#userModal_2').modal('show'); }
那么你:
- 提醒某事
- 显示模型
在任何时候,您都不会对data
响应进行任何处理。
仅仅向浏览器发送一些包含脚本元素的 HTML 并不会导致浏览器将该 HTML 转换为 DOM 并执行所有脚本元素。
你需要明确地这样做。
也就是说,通过 Ajax 发送带有嵌入式 JS 的 HTML 块充其量是混乱的。
这就是为什么大多数 Web 服务返回格式为 JSON 的数据并将其留给客户端 JS 来处理该数据的原因。
推荐阅读
- dart - 如何使用 final d = Decimal.parse;
- python - 我正在尝试创建一个虚拟环境,但“完成”从未出现
- android - Angular 8 + Cordova 6 = 空白页
- python - 删除每个单词除第一个字母以外的所有字母并保留标点符号
- filter - 同一属性上的 SAP Cloud OData 过滤器逻辑(substringof 和 substringof)失败
- javascript - 在 angularMaterialTable 中使用 *ngIf
- python - 在 DolphinDB 中的 Datetime 列上像 pandas 一样滚动
- r - 在单元格中保存一列
- google-apps-script - Apps 脚本 - 如何用普通字符替换 Google Docs 中的智能引号字符?
- javascript - 从同一数组中的其他索引值插入索引值