Jquery ajax返回404未找到

8
我将使用Ajax将表单数据和文件传递到PHP文件进行处理。 Javascript

$("form#applyform").submit(function(){

var data = new FormData();
jQuery.each($('#file')[0].files, function(i, file) {
    data.append('file-'+i, file);
});

$.ajax({
    url: 'ValidateApplication.php',
    data: data,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
    }
});

}

ValidateApplication.php一定存在。如果我在网页浏览器中输入地址,我可以查看它,但是当我提交表单时,Chrome控制台返回404。

PHP与JavaScript运行的HTML页面位于同一文件夹中,因此我困惑为什么我一直收到404错误。

更新

将POST更改为GET可以消除404错误,但会返回500内部服务器错误。

更新2

将表单的操作更改为"ValidateApplication.php"并正常提交(不使用AJAX)将导致正确的文件而没有任何错误。


7
你的大小写是否正确?某些操作系统/网络服务器会对大小写有不同的处理方式。(例如,ValidateApplication.phpvalidateapplication.phpValidateapplication.php并不相同。) - esqew
完整的网页浏览器URL是什么?您是否尝试设置完整的URL而不仅仅是您发布的“ValidateApplication.php”? - Giacomo1968
1
请使用绝对路径。 - RNK
1
另外,仅为测试目的,如果您使用绝对路径而不是相对路径到PHP文件会发生什么? - Ed Meacham
1
大写字母使用正确,完整的URL是http://localhost/Scope%20Website/ValidateApplication.php,并且使用绝对路径仍然会出现相同的错误。 - Ashwin Sekar
显示剩余2条评论
8个回答

4
我曾经遇到过同样的问题,在寻找了两个小时后发现造成404未找到错误的原因是我最近在尝试使用PHP中的header()函数,但忘记删除以下代码行:
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 

删除后,我的Ajax函数恢复正常。

1
我在找到你的帖子之前花了4个小时。谢谢! - Ramon Araujo

4

看起来是与FormData对象有关的问题。一旦我改用.serialize()方法,页面就可以正常工作了。

$("form#applyform").submit(function(){

    var data = $("form#applyform").serialize();
    jQuery.each($('#file')[0].files, function(i, file) {
        data.append('file-'+i, file);
    });

    $.ajax({
        url: 'ValidateApplication.php',
        data: data,
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST',
        success: function(data){
            alert(data);
        }
    });
}

你确定你写对了吗?应用serialize的结果不是具有append方法的东西! - Alexander

3

对我而言,问题出在我使用了一个 name="name" 的输入框导致调用的页面返回了404错误。很奇怪,但希望这能帮到其他人。


0
尝试在文件名前添加 /: url: '/ValidateApplication.php',
尝试将请求类型从 POST 更改为 GET 并查看是否有效。
尝试注释掉代码的某些部分:
/*cache: false,
contentType: false,
processData: false,*/

尝试另一个浏览器。


文件名前的 / 导致它使用根目录,这样是无法正常工作的。(会跳转到 http://localhost/ValidateApplication.php 而不是文件实际位于的 http://localhost/Scope%20Website/ValidateApplication.php)。 - Ashwin Sekar
改成 GET 方法可以运行,但会导致 500 内部服务器错误。 - Ashwin Sekar
将那些行注释掉会导致非法调用错误。 - Ashwin Sekar
如果没有看到实际从您的计算机和服务器发送和接收的数据,很难确定问题出在哪里。您能否嗅探数据包并发布它?PHP文件的内容是什么?它是否正确处理传入的数据?数据类型呢?是JSON吗?请注释PHP文件中的所有行,并使用var_dump($_POST)查看发生了什么。 - Greg K

0
请检查您的PHP页面名称!
请不要使用page-ajax.php,而是使用page_ajax.php

0
请验证您已正确提供表单中的name =“”属性 表单提交将从输入的name属性验证所有bean属性

0

我遇到了同样的问题。 很可能是您重命名了ValidateApplication.php文件, 或者忘记了重命名。


0

根据我的经验,我建议您务必重新检查您的URL地址。


答案不明确。 - Sunderam Dubey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接