Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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
如何使用Ajax从JavaScript调用php函数?_Javascript_Php_Jquery_Ajax_Wordpress - Fatal编程技术网

如何使用Ajax从JavaScript调用php函数?

如何使用Ajax从JavaScript调用php函数?,javascript,php,jquery,ajax,wordpress,Javascript,Php,Jquery,Ajax,Wordpress,在我的Wordpress站点中,我想创建一个包含所有标签的下拉菜单,但是因为它有超过7.000个标签,所以只有在用户单击后才需要加载。我现在只知道使用Ajax是可能的,我已经开始了,但还没有完成 在此小提琴中,单击后,加载此javascript文件: /echo/js/?js=你好%20world!。 Fiddle中的第二个示例只是展示我的实际代码。我希望由php函数填充的结果仅在用户单击后开始。 但我不知道如何将其更改为PHP函数。另外,是否可以在输出中添加普通PHP脚本,或者仅将其嵌入到文件

在我的Wordpress站点中,我想创建一个包含所有标签的下拉菜单,但是因为它有超过7.000个标签,所以只有在用户单击后才需要加载。我现在只知道使用Ajax是可能的,我已经开始了,但还没有完成

在此小提琴中,单击后,加载此javascript文件: /echo/js/?js=你好%20world!。 Fiddle中的第二个示例只是展示我的实际代码。我希望由php函数填充的结果仅在用户单击后开始。
但我不知道如何将其更改为PHP函数。另外,是否可以在输出中添加普通PHP脚本,或者仅将其嵌入到文件中

您的问题似乎是如何从浏览器javascript代码调用服务器上的php函数。在代码中,您有以下函数,其中第一个参数是服务器端请求:

function getSuccessOutput() {
  getRequest(
      '/echo/js/?js=hello%20world!', // demo-only URL
       drawOutput,

  );
  return false;
}
要将其更改为调用服务器php例程,您需要更改“/echo/js/?js=hello%20world!”要在服务器上执行的url:例如,“/myPHPFolder/someRoutine.php”。结果将返回到您的req对象

在初始html文件(例如index.html)中,或在启动流的任何位置,在body标记上包含onload选项:

<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="yada yada yada">
    <meta name="author" content="you">
    <title>title for browser tab</title>
  </head>
  <body class="tutorial" onLoad="initPage()">
    <select id="optionList"></select>
  </body>
</html>

正如Draco18s所说,在您的例子中,Javascript在客户端执行,PHP在服务器端执行

在这种情况下,您可以使用Ajax向服务器发出请求

例如,如果您具有以下html:

<select name="tag-dropdown" id="selectTags">
    <option value="#">Select an artist</option>
</select>
您可以使用Ajax向PHP脚本发出POST请求:

$( document ).ready(function() {
  $.ajax({ url: 'merge2.php',
      data: {operationName: "tagsNames"},
      type: 'post',
      success: function(output) {
            tagNamesres = JSON.parse(output);
            jQuery.each(tagNamesres, function(name, val) {
                                $("#selectTags").append('<option value="'+val+'">'+name+'</option>');
            });             
            }
  });
}); 
PHP脚本可以包含以下内容:

    <?php 
if (isset($_POST['operationName']) && !empty($_POST['operationName']) && $_POST["operationName"]=="tagsNames") {
    $resultarray = array();
    $resultarray["tagName1"] = "tagValue";
    $resultarray["tagName2"] = "tagValue2";
    echo json_encode($resultarray);
    return;
}
?>
为了从PHP函数返回一些东西,您需要打印或使用echo。 这只是一个示例,您可以开始使用:


有关Ajax请求如何工作的更多信息,请阅读此

您需要更改PHP代码,以便在发送该请求时执行所需操作。PHP函数如下所述:。但我不知道如何添加getRequest,因为有一个js,我尝试更改为php文件,但没有成功。另外,我不想添加另一个外部文件,我想以内联方式添加它。有可能吗?Javascript是客户端,PHP是服务器端。不能从Javscript调用PHP中的函数。您需要向包含您的函数的PHP url发出AJAX请求。@HenriqueBarcelos为什么不创建另一个文件?我最近不得不重做一个项目,有人把他们所有的PHP放进了2个文件,这是一个需要排序和转换的怪物,更容易访问和开发,结果是大约30个新文件和111个新提交。我确实想知道你的方法的基本原理。一个包含7000个值的下拉列表对用户和浏览器本身都是一个巨大的负担。您是否考虑过一种为用户提供更小、更易于管理的集合的方法?或者更好。如何加载包含所有选项的文件?我认为,每次用户单击时执行此脚本将非常昂贵。那么我如何在代码中加载一个选项列表呢?选择一个艺术家。。或者更好:如何加载包含所有选项的文件?我认为,每次用户单击时执行此脚本仍然需要花费大量服务器成本。那么我如何在代码中加载一个选项列表呢?选择一个艺术家。。我将经常使用BODY标记的HTML onload扩展来调用页面初始化函数。在您的情况下,我会这样做,以支持对服务器的单例查询。我将编辑我的回复,为您提供一个代码示例。
    <?php 
if (isset($_POST['operationName']) && !empty($_POST['operationName']) && $_POST["operationName"]=="tagsNames") {
    $resultarray = array();
    $resultarray["tagName1"] = "tagValue";
    $resultarray["tagName2"] = "tagValue2";
    echo json_encode($resultarray);
    return;
}
?>