首页 > 解决方案 > 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 文件的代码?

标签: javascriptphpjquerymysqlajax

解决方案


您的 JavaScript 正在向执行您的 PHP 程序的 URL 发出 HTTP 请求。

当它得到响应时,您执行以下操作:

    .done(function( data ) {
        alert("foursquare api called");
        $('#userModal_2').modal('show');
    }

那么你:

  1. 提醒某事
  2. 显示模型

在任何时候,您都不会对data响应进行任何处理。

仅仅向浏览器发送一些包含脚本元素的 HTML 并不会导致浏览器将该 HTML 转换为 DOM 并执行所有脚本元素。

你需要明确地这样做。


也就是说,通过 Ajax 发送带有嵌入式 JS 的 HTML 块充其量是混乱的。

这就是为什么大多数 Web 服务返回格式为 JSON 的数据并将其留给客户端 JS 来处理该数据的原因。


推荐阅读