1

我在将 AJAX 与 PHP 连接时遇到问题。主要目标是向 PHP 发送请求,我们可以在其中执行删除图像的方法。每件事听起来都很好,很简单,但整个连接不能正常工作 - 基本上它根本不工作。

这是关于我想要实现的最简单的例子。

jQuery代码:

$("span.deleteTmp").live("click", function() {
    obj_a = $(this);
    if (confirm("Want to delete the file?")) {
        $.ajax({
            url: "index.php?mode=functions&method=deleteFile",
            data: {
                pict_name: obj_a.attr("id")
            },
            dataType: "json",
            success: function(data) {
                alert(data.msg);
                if (data.success == true) {
                    obj_a.parents("li").remove();
                }
            }
        });
    }
});​

PHP 示例代码:

/* invoking methods */
if(isset($_GET['method'])) {
   $method = $_GET['method'];
   call_user_func($method);
}

/* methods */
function deleteFile() {
   $result = array('success'=>true, 'msg' => "OK");
   echo json_encode($result);
}

此外,当我在浏览器中键入 index.php?mode=functions&method=deleteFile 时,我会得到正确的响应,例如:{"success":true,"msg":"OK"}

在这种情况下我做错了什么?

4

3 回答 3

0

由于您使用的是 JQuery,因此我将在 JQuery 中编写此代码。

首先live是已弃用或已弃用。

另一个提示是不要使用 GET 来修改和删除服务器中的内容,因为有人很容易滥用它。此外,您还允许 GET 在没有任何实际验证的情况下指示应该运行什么功能:index.php?mode=functions&method=deleteFile. 有人可以轻松地更改它以定义您不想直接从网站运行的功能。

所以我要做的第一件事就是将 live 更改为 on() ,例如:

$(".deleteTmp").on('click', function(e){
    if(confirm('delete?'){
        $.get('index.php', {mode: 'functions', method: 'deleteFile', pict_name: $(this).attr('id')}, function(data){
            console.log(data);
        }, 'json');
    }
});

这样的事情应该会给你正确的结果。用 f12 打开你的控制台,看看它会给你什么,当然要确保当你点击元素时实际事件正在运行,我知道这听起来很愚蠢,但我犯了一个错误,坐在那里几个小时思考为什么 AJAX 不会' t运行只是发现它甚至没有触发click事件。

编辑

但是我确实看到了您的实际问题。您正在为 JQuery 定义两个 GET,首先在 url 中:

index.php?mode=functions&method=deleteFile",

然后在数据中:

pict_name: obj_a.attr("id")

如果我没记错的话,JQuery 在这种情况下实际上会触发 AJAX 调用:

index.php?pict_name=whatever

所以试试我上面的代码。

于 2012-08-18T11:51:24.233 回答
0

如果您在直接访问查询 URL 时得到预期的回复,那么您应该检查前面的步骤是否有效。尝试使用 Firebug 或“检查元素”左右(取决于您使用的浏览器),然后转到“网络”选项卡以检查您的请求是否正在发送并检查变量的值是否正确。如果不是这种情况,请检查您尝试获取“点击”事件的元素的类名中是否存在更明显的错误,例如拼写错误或不正确的名称。

于 2012-08-18T11:01:40.070 回答
0

尝试在输出 JSON 结果之前设置标头,例如:

function deleteFile() {
   $result = array('success'=>true, 'msg' => "OK");
   header('Cache-Control: no-cache, must-revalidate'); // prevent the browser from caching the response
   header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // prevent the browser from caching the response
   header('Content-type: application/json'); // sets the correct MIME type for JSON
   echo json_encode($result);
}
于 2012-08-18T11:38:55.650 回答