使用AJAX包含PHP文件

时间:2017-03-23 19:18:40

标签: javascript php jquery ajax

每次有人点击某个按钮时,我都会尝试使用AJAX来包含语言PHP文件,所以我使用提交方法创建了两个输入:

<input type="submit" id="spanish" name="es" value="Spanish"/><br>
<input type="submit" id="english" name="en" value="English"/>

然后我使用jQuery脚本向服务器建立AJAX请求:

<script>

  $('#spanish').click(function(){
    $.ajax({
      url: "init.php",
      type: "POST"
    })
  })
  $('#english').click(function(){
    $.ajax({
      url: "init.php",
      type: "POST"
    })
  })

</script>

我想通过AJAX请求将输入值传递给我在init.php中创建的PHP函数:

if (($_SERVER["REQUEST_METHOD"] === "POST") && (isset($_POST['es']))) {
    include $lang . 'spanish.php';
} elseif (($_SERVER["REQUEST_METHOD"] === "POST") && (isset($_POST['en']))) {
    include $lang . 'english.php';
} else {
    include $lang . 'english.php';
}

另外,在这种情况下,我不知道如何使用success()done()方法。我想没有返回任何值或数据!我对AJAX有点困惑,因为这是我第一次需要使用它。

更新: @Sacha不,它不会像添加新东西那样追加。在我的页面中,我正在为每个单词或段落使用语言函数,我希望在确定的语言中使用它的含义。例如,在我的网站上有一个名为“关于我们”的标签,将此标签翻译成另一种语言的等效含义我在该标签内调用语言功能,在我的PHP英文文件中我已经创建了一个名为lang的函数:

function lang( $phrase ) {
static $lang = array(
'HOME'             => 'Home',
'CATEGORIES'       => 'Our Services',
'CONTACT'          => 'Contact Us',
'TEAM'             => 'Our Team',
'ABOUT'            => 'About Us',
'WELCOME'          => 'You are welcome',
'WELCOME_MESSAGE'  => 'Your are welcome',
'LANGUAGE'         => 'English')
 return $lang[$phrase];}

同样对于西班牙语,我有相同的功能,但我的西班牙语单词和句子。当有人点击特定按钮时,我需要包含其中一个文件。这就是我需要从Ajax脚本中为我实现的目标。希望这个评论足够解释。

另一个更新: 再次感谢@Sacha:D。实际上我已经尝试了这个并且它与语言文件完美配合,包括但是我也使用这个按钮来改变我的主题CSS文件并使用简单的jQuery脚本将其替换为另一个CSS目录。问题是当单击按钮时,由于POST,GET方法和样式文件永远不会更改页面重新加载。这就是为什么我需要AJAX来包含我的PHP文件,然后我可以避免页面重新加载操作。

3 个答案:

答案 0 :(得分:0)

您可以使用GET并使其更容易..

// Drop down menu
$(".shopDrop").hide();

$(".shop ul li").hover(function(){
    $(this).find(".shopDrop").slideDown();
}, function(){
    $(this).find(".shopDrop").slideUp();
});

// Drop down menu info
$("#doublePoints").hover(function(){
    console.log("in");
    $(this).find(".shopHoverInfo").css("display", "block");
    $(this).find(".shopHoverInfo").fadeIn();
}, function(){
    console.log("out");
    $(this).find(".shopHoverInfo").hide().fadeOut();
});

然后

<script>

  $('#spanish').click(function(){
    $.ajax({
      url: "init.php?lang=es",
      type: "GET"
    })
  })
  $('#english').click(function(){
    $.ajax({
      url: "init.php?lang=en",
      type: "GET"
    })
  })

</script>

可能有一种更简洁的方法可以达到相同的效果,但我的建议与你的方法非常相似。

顺便说一下,我认为这只是代码的一小部分,因为它本身并没有做多少。您可以在http://api.jquery.com/jquery.ajax/

了解如何使用done()

答案 1 :(得分:0)

这个问题的解决方案非常简单,首先你需要按钮:

<button type="button" id="spanish" name="es" >Spanish</button><br>
<button type="button" id="english" name="en" >English</button>

然后,你不需要任何ajax,也不需要提交,只需这样:

$('#spanish').click(function(){
  window.location.href = window.location.host + "/init.php&lang=es";
});
$('#english').click(function(){
  window.location.href = window.location.host + "/init.php&lang=es";
});

这将使按钮重新加载页面,发送查询字符串。

然后你必须将它预备到init.php:

if (($_SERVER["REQUEST_METHOD"] === "GET") && isset($_GET['lang']) && $_GET['lang'] == "en" ) {
    include $lang . 'spanish.php';
} elseif (($_SERVER["REQUEST_METHOD"] === "GET") && isset($_GET['lang']) && $_GET['lang'] == "en") {
    include $lang . 'english.php';
} else {
    include $lang . 'english.php';
}

请记住,我们使用的是get而不是post。

答案 2 :(得分:0)

简而言之,ajax无法与运行的页面的PHP进行交互,因为该代码已经运行。因此,您不能包含带有ajax的PHP文件,但您可以将数据发送到外部PHP脚本进行处理,并使用返回的结果更新当前页面。

通过它的声音,你不需要那个,并且会逃脱一个简单的重定向,因为似乎在其他地方为你工作。这是一种简单的方法,您可以随时调整它以使用AJAX函数而不是重定向。

<强> HTML

如果您为所有按钮提供一个类并使用数据标记,则只需要一次单击功能。

<button class='submitButtons' data-lang='en'>English</button>
<button class='submitButtons' data-lang='es'>Spanish</button>
<button class='submitButtons' data-lang='it'>Italian</button>
etc...

<强>的jQuery

$(".submitButtons").click(function(){
    var langClicked = $(this).data("lang");
    window.location.href = window.location.href + "/init.php?lang=" + langClicked;
}

PHP - init.php

if(isset($_REQUEST['lang'])){
    $langPath = "/path/to/included/files/dir/";
    $lang = trim($_REQUEST['lang']);             // any other cleanup here
    $ext = ".php";                            // file extension

    $fullPath = $langPath . $lang . $ext;

    if(file_exists($fullPath)){ 
        include $fullPath;
    }
}

因此,您所包含文件的名称将是您在data-lang属性中添加的内容以及文件扩展名,例如'en.php','es.php'