【问题标题】:Jquery ajax returning 404 not found找不到返回 404 的 Jquery ajax
【发布时间】:2014-06-23 15:52:42
【问题描述】:

我正在使用 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 Internal Server Error

更新 2

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

【问题讨论】:

  • 请文件夹结构
  • 您的大小写是否正确?某些操作系统/Web 服务器以不同的方式处理大小写。 (即ValidateApplication.phpvalidateapplication.php 不同,Validateapplication.php 也不同)
  • 尝试使用绝对路径
  • 另外,为了测试,如果你使用绝对路径而不是 PHP 文件的相对路径会发生什么?
  • 大小写正确,完整的URL是localhost/Scope%20Website/ValidateApplication.php,使用绝对路径还是报同样的错误

标签: javascript php jquery ajax


【解决方案1】:

我遇到了同样的问题,在寻找导致 404 Not Found 错误的原因 2 小时后,我发现我最近正在使用 PHP 中的 header() 并且忘记删除以下代码行:

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 

删除后,我的Ajax功能又恢复正常了。

【讨论】:

  • 我花了 4 个小时才找到您的帖子。谢谢!
【解决方案2】:

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方法的东西!
【解决方案3】:

对我来说,是因为我使用了带有 name="name" 的输入字段,这使得被调用的页面返回 404。奇怪的东西,希望这对某人有所帮助。

【讨论】:

    【解决方案4】:

    尝试在文件名前添加 /: url: '/ValidateApplication.php',

    尝试将请求类型从 POST 更改为 GET,看看是否有效。

    尝试注释掉部分代码:

    /*cache: false,
    contentType: false,
    processData: false,*/
    

    尝试其他浏览器。

    【讨论】:

    • 文件名前的 / 导致它使用了不起作用的根目录。 (转到localhost/ValidateApplication.php 而不是文件所在的localhost/Scope%20Website/ValidateApplication.php)。
    • 将其更改为 GET 有效,但会导致错误 500 内部服务器错误
    • 注释掉这些行会导致非法调用错误
    • 如果不查看进出您的 pc 和服务器的实际数据,就很难确切地看出哪里出了问题。你能嗅出这个数据包并把它寄出去吗? php文件的内容是什么?它是否正确处理传入的数据?数据类型呢?是 JSON 吗?注释掉 php 文件和 var_dump($_POST) 中的所有行以查看发生了什么。
    【解决方案5】:

    请确认您已在表单中正确提供了 name="" 属性 表单提交验证输入的名称属性中的所有bean属性

    【讨论】:

      【解决方案6】:

      请检查您的 PHP 页面名称!

      不要使用page-ajax.php,而是使用page_ajax.php

      【讨论】:

        猜你喜欢
        • 2022-01-22
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        相关资源
        最近更新 更多