ajax 请求成功,但 php 不成功 运行

ajax request is successful, but php is not running

我有一个非常简单的 jquery 函数,它向 php 文件发送一个 Ajax 调用,该文件应该回显一个警报,但是对于我来说,无法得到它至 运行。现在,我只是想触发 php 到 运行。这是 javascript:

function getObdDescription(){

    var $code = document.getElementById("vehicle_obd_code").value;
    var $length = $code.length;


    if($length == 5){
        window.confirm($length);

        $.ajax({ url: '/new.php',
            data: {action: 'test'},
            type: 'post',
            success:function(result)//we got the response
            {
            alert('Successfully called');
            },
            error:function(exception){alert('Exception:'+exception);}
        });
        }
    return false;
}

这里是new.php

<?php
    echo '<script language="javascript">';
    echo 'alert("message successfully sent")';
    echo '</script>';
?>

我正在 Chrome 中测试,打开网络选项卡,可以看到调用成功,同时,我收到弹出的 'Successfully called' 消息,所以jquery为运行ning,Ajax调用成功。我也知道 url: '/new.php 是正确的,因为当我从我的服务器中删除 new.php 时,我从控制台和网络选项卡中得到状态“404(未找到)”。我什至在没有条件 if($length ==... 的情况下进行了测试,但仍然没有运气。当然,我知道这不是问题所在,因为我收到了 'Successfully called' 响应。有什么想法吗?

如果您需要 alert 文本,这不是它的工作方式,您应该在 ajax success 函数的前端执行,遵循 KISS (Keep It Simple Stupid) 并在 php 中回显文本。这才是正确的做法。

你应该这样做:

function getObdDescription() {

    var $code = document.getElementById("vehicle_obd_code").value;
    var $length = $code.length;


    if ($length == 5) {
        window.confirm($length);

        $.ajax({
            url: '/new.php',
            data: {
                action: 'test'
            },
            type: 'post',
            success: function (result) //we got the response
            {
                alert(result);
            },
            error: function (exception) {
                alert('Exception:' + exception);
            }
        });
    }
    return false;
}

在你的php

<?php
   echo 'message successfully sent';
?>

穆罕默德,你完全正确。它不会像我期望的那样工作。我并不是真的想打一个 Ajax 电话,只是想让一个警告框弹出;我只是想确认通话是否正常,PHP 是 运行ning。将 alert('Successfully called'); 更改为 alert(result); 并阅读 php 中的文本肯定确认 php 一直是 运行ning。

我想继续讨论主题,post 如果需要的话,我会讨论另一个主题,但有一个后续问题。为了更详细地说明我正在尝试做的事情,我正在尝试 运行 我的 php 文件中的一个函数,这将依次更新一个模板变量。例如,这里有一个这样的函数:

function get_vehicle_makes()
{
    $sql = 'SELECT DISTINCT make FROM phpbb_vehicles
            WHERE year = ' . $select_vehicle_year;

    $result = $db->sql_query($sql);

    while($row = $db->sql_fetchrow($result))
    {
        $template->assign_block_vars('vehicle_makes', array(
            'MAKE'    => $row['make'],
        ));
    }
    $db->sql_freeresult($result);
}

现在,我知道这个功能有用了。然后我可以在我的 Javascript 中访问这个函数:

<!-- BEGIN vehicle_makes -->
        var option = document.createElement("option");
        option.text = ('{vehicle_makes.MAKE}');
        makeSelect.add(option);
<!-- END vehicle_makes -->

这是一个块循环,将循环遍历php函数中设置的块变量。这在加载页面时起作用,因为加载的页面是我尝试调用 Ajax 的 new.php,以及所有 php 运行s加载时在该文件中。但是,我需要再次 运行 的函数来更新该块变量,因为它会根据 html 中的选择更改而更改。我不知道这种块循环是否常见。我正在了解它们,因为它们与我在我的网站上安装的论坛 phpBB 一起使用。 (我在他们的支持论坛上寻找过这方面的帮助。)。我认为另一种可能的解决方案是 return 一个数组,但为了保持一致性,我想尽可能坚持使用块变量。

我正在使用这个条件和切换来调用函数:

if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];

    //Get vehicle vars - $select_vehicle_model is used right now, but what the heck.
    $select_vehicle_year = utf8_normalize_nfc(request_var('vehicle_year', '', true));
    $select_vehicle_make = utf8_normalize_nfc(request_var('vehicle_make', '', true));
    $select_vehicle_model = utf8_normalize_nfc(request_var('vehicle_model', '', true));

    switch($action) {
    case 'get_vehicle_makes' :
        get_vehicle_makes();
        break;
    case 'get_vehicle_models' :
        get_vehicle_models();
        break;
    // ...etc...
    }
}

这是 javascript 到 运行 Ajax:

function updateMakes(pageLoaded) {
    var yearSelect = document.getElementById("vehicle_year");
    var makeSelect = document.getElementById("vehicle_make");
    var modelSelect = document.getElementById("vehicle_model");

    $('#vehicle_make').html('');

    $.ajax({ url: '/posting.php',
            data: {action: 'get_vehicle_makes'},
            type: 'post',
            success:function(result)//we got the response
            {
            alert(result);
            },
            error:function(exception){alert('Exception:'+exception);}
    });
    <!-- BEGIN vehicle_makes -->
        var option = document.createElement("option");
        option.text = ('{vehicle_makes.MAKE}');
        makeSelect.add(option);
    <!-- END vehicle_makes -->

    if(pageLoaded){
        makeSelect.value='{VEHICLE_MAKE}{DRAFT_VEHICLE_MAKE}';
        updateModels(true);
    }else{
        makeSelect.selectedIndex = -1;
        updateModels(false);
    }
}

javascript会运行,ajax会成功。似乎没有设置块变量。