Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX在单独的文件中调用php函数_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 使用AJAX在单独的文件中调用php函数

Javascript 使用AJAX在单独的文件中调用php函数,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我一直在编写一个货币转换器,需要使用jQuery和AJAX发送货币之间的转换,以及要转换为PHP文件的值,该文件将返回转换后的值 我的解决方案基于:然而它似乎不起作用 jQuery代码: <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> <script> function exchange(from, to, amount){ aler

我一直在编写一个货币转换器,需要使用jQuery和AJAX发送货币之间的转换,以及要转换为PHP文件的值,该文件将返回转换后的值

我的解决方案基于:然而它似乎不起作用

jQuery代码:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>

<script>
function exchange(from, to, amount){
    alert("got to here"); //this alert shows
    jQuery.ajax({
        type: "POST",
        url: 'exchange_caller.php',
        dataType: 'json',
        data: {functionname: 'exchange_rate_convert', arguments:["USD", "EUR", 1]},
        //dummy pass values

        success: function (obj, textstatus){
            if( !('error' in obj)){
                answer = obj.result;
                alert(answer);      //neither of these alerts show
                alert('anything');
            }
            else{
                console.log(obj.error);
                alert("got an error"); //this alert doesn't show
            }
        }
    });
    alert("passed the block"); //this alert shows
    return false;               //return false so the page doesn't refresh
}</script>

功能交换(从、到、金额){
警报(“到达这里”);//此警报显示
jQuery.ajax({
类型:“POST”,
url:'exchange_caller.php',
数据类型:“json”,
数据:{functionname:'exchange_rate_convert',参数:[“USD”,“EUR”,1]},
//伪传递值
成功:功能(obj、textstatus){
如果(!(obj中的“错误”){
答案=目标结果;
警报(应答);//这两个警报都不显示
警惕(“任何事”);
}
否则{
控制台日志(对象错误);
警报(“出现错误”);//此警报不显示
}
}
});
警报(“已通过块”);//此警报显示
return false;//返回false,因此页面不会刷新
}
php文件“exchange_caller.php”(设置为虚拟)中的代码


当运行此命令时,我会收到“Get to here”和“passed the block”错误消息,但在我应该返回结果时,这两条消息都不会返回

任何帮助都将不胜感激


谢谢。

我用发布的代码设置了文件,它们按预期运行

看起来还有一个问题与提供的代码无关


我建议确保您的托管环境没有问题。查阅您的服务器日志,查看是否有其他问题阻止您的请求得到满足,并在另一个浏览器中测试它,以确保没有插件或扩展程序干扰它。

如果只使用
obj
本身发出
警报
,不要忘记添加
错误
捕获块,可能会对您有所帮助。还可以查看网络选项卡,它在调试ajax请求时非常有用。如果您在php功能中添加了var_dump(“arrized”)。此打印?仅显示obj的警报不会显示。var_dump(“到达”)也不会打印,但我不确定它应该打印到哪里,因为使用ajax的目的是不必刷新页面。将var_dump(“到达”)放在if(!isset($_POST['functionname'])和put die()之前;在var_转储之后。他将在您检查控制台后的警报中打印,任何请求和响应都将在那里可见。这确实“解决”了问题。通过在jQuery/ajax文件中添加:来解决问题。但是,我现在遇到了代码立即运行而不被调用的问题。您是否正在发出跨域请求?当这两个文件都托管时在同一个域中,它们运行正常。包含/内联PHP将破坏您的实现。两个文件位于同一文件夹中
<?php header('Content-Type: application/json');

$aResult = array();

if(!isset($_POST['functionname'])){
    $aResult['error'] = 'No function name!';
}
if(!isset($_POST['arguments'])){
    $aResult['error'] = 'No function arguments';
}
if(!isset($aResult['error'])){
    switch($_POST['functionname']){
        case 'exchange_rate_convert':
            if(!is_array($_POST['arguments']) || (count($_POST['arguments']) < 3)){
                $aResult['error'] = 'Error in arguments!';
            }
            else{
                $aResult['result'] = exchange_rate_convert($_POST['arguments'][0], $_POST['arguments'][1], $_POST['arguments'][2]);
            }
            break;

        default:
            $aResult['error'] = 'Not found function '.$_POST['functionname'].'!';
            break;
    }
}

echo json_encode($aResult);

function exchange_rate_convert($from, $to, $amount){    //function to run
    //dummy code, just return 2 for now
    $value = 2;
    return $value;
}?>