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会成功。似乎没有设置块变量。
我有一个非常简单的 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会成功。似乎没有设置块变量。