【问题标题】:Call Php Function From AJAX Not Working从 AJAX 调用 PHP 函数不起作用
【发布时间】:2012-07-08 15:53:24
【问题描述】:

我正在尝试使用 AJAX 调用 PHP 函数。下面是我使用的脚本。

<script type="text/javascript" src="jquery.1.4.2.js">

    $(document).ready(function () { 

               // after EDIT according to 
               // @thecodeparadox answer

       $('#local').click(function(e){
            e.preventDefault();
            e.stopPropagation();
            promptdownload();
       });
    });

        function promptdownload(e) 
        {
        $.ajax({
             type: "POST",
             url: "js/prompt.php",
             data: { "get" : "runfunction", "action" : "promptlocal" },
             success: function (response) {
             }    
         });
        }
</script>

对应的PHP代码(prompt.php)为:

<?php
$path1 = "downloads/1.jpg";
$browserFilename1 = "Local Travel";
$mimeType1 = "image/jpeg";


function promptToDownload($path, $browserFilename, $mimeType)
{

    if (!file_exists($path) || !is_readable($path)) {

        return null;
    }

    header("Content-Type: " . $mimeType);
    header("Content-Disposition: attachment; filename=\"$browserFilename\"");
    header('Expires: ' . gmdate('D, d M Y H:i:s', gmmktime() - 3600) . ' GMT');
    header("Content-Length: " . filesize($path));
    // If you wish you can add some code here to track or log the download

    // Special headers for IE 6
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    $fp = fopen($path, "r");
    fpassthru($fp);
}

if ($_POST["action"] = 'promptlocal')
{
    promptToDownload($_GET[$path1], $browserFilename1, $mimeType1);//comments
}

?>

这就是我编写应该触发该功能的按钮的方式:

<input type="button" id="local" name="local" value="Local Travel">

我的预期输出是让这个按钮提示用户:“保存 1.jpg 文件的位置”。

但是我无法让它工作。

非常感谢任何建议。

【问题讨论】:

  • 缺少一些引号和小语法错误
  • if ($_POST["action"] = 'promptlocal'),这是赋值不是比较,需要用==来比较值!

标签: php javascript jquery ajax


【解决方案1】:
$('local').click(function(e){

应该是

$('#local').click(function(e){

因为local 是id,所以你应该在它之前使用#。而且在您的 php 代码中也缺少一些引号。

【讨论】:

  • 嗨,谢谢回复。我根据您的回答修复了缺失的部分。但是,它仍然无法正常工作。有什么建议吗?
  • @rofansmanao 你检查你的控制台了吗?尝试使用alert('message') 内部的success 函数ajax 请求。
【解决方案2】:

使用 Firebug(FF)、Dragonfly(Opera)、开发者工具(Chrome)。您可以查看所有 javascript 错误、警告和异常,并且可以查看 ajax 请求数据。

【讨论】:

    【解决方案3】:
    data: { "get" : "runfunction", "action" : "promptlocal" }, 
    

    尝试从“get”和“action”中删除引号。

    像这样:

        data: { get : "runfunction", action : "promptlocal" }, 
    

    【讨论】:

    • 这没有意义。它必须被引用,因为它必须遵循 JSON 约定!
    【解决方案4】:

    在我看来,您正在尝试使用 jquery/ajax 下载文件。你不会让它只使用 ajax。这个问题在stackoverflow上已经回答了好几次了。

    希望此链接对您有所帮助:Ajax File Download using Jquery, PHP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 2019-02-25
      • 2014-08-17
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多