首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候404不是404?

什么时候404不是404?
EN

Stack Overflow用户
提问于 2011-06-01 22:42:30
回答 6查看 2.6K关注 0票数 8

我正在使用下面的jQuery调用加载位于同一服务器上的.php文件。

然而,使用Chrome的javascript控制台,它在我试图加载的php文件上报告"404未找到“。不过,我可以直接加载该文件,只需在控制台中单击该文件即可。

此外,我可以直接从javascript控制台复制文件的URL,在那里它报告404 (未找到),打开一个新选项卡,将其粘贴到地址栏中,然后点击脚本,没有问题。

这是特定于jQuery get方法的东西吗?是什么原因导致页面在get方法中为404,但在直接调用时执行正常?

代码语言:javascript
复制
$('.colorReset').click
    (
        function() 
        {
        var myImage = $('#theme :selected').text();
        $.get('<?php echo get_bloginfo('template_directory') ?>/colorReset.php', {theme: myImage, spot: '1'}, function(data){doColor('#theme_header_color', data);});
        }
    );

    //script never gets to the doColor function, due to the apparent 404 on colorReset.php
function doColor(el, color)
    {
    $(el).val(color).trigger('keyup');
    $(el).attr('value', color);
    $(el).val(color);
}

下面是get调用的源文件colorReset.php ...

代码语言:javascript
复制
<?php
require_once('../../../wp-blog-header.php');

add_action( 'admin_init', 'check_user' );

function check_user()
    {
    if (!is_user_logged_in()){
        die("You Must Be Logged In to Access This");
    }
    if( ! current_user_can('edit_files')) {
        die("Oops sorry you are not authorized to do this");
    }
}

$myTheme = $_REQUEST['theme'];
$spot = $_REQUEST['spot'];
$myThemeColor = $myTheme."_color".$spot;

$file = "styles/".$myTheme."/template.ini";
    if (file_exists($file) && is_readable($file))
    {
    $ini_array = parse_ini_file($file);
     if($spot == 1){$myColor = $ini_array['color1'];}
     if($spot == 2){$myColor = $ini_array['color2'];}
     if($spot == 3){$myColor = $ini_array['color3'];}
     if($spot == 4){$myColor = $ini_array['color4'];}
    }
    else
    {
     if($spot == 1){$myColor = get_option('theme_header_color');}
     if($spot == 2){$myColor = get_option('theme_sidebar_color');}
     if($spot == 3){$myColor = get_option('theme_spot_color_alt');}
     if($spot == 4){$myColor = get_option('theme_spot_color_alt2');}
    }
echo $myColor;
?>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-01 23:50:52

作为described in another answer,加载wp-blog-header.php将引导整个WordPress请求处理过程。由于您的脚本实际上不是WordPress帖子,因此此过程将设置404头,以指示它无法找到您正在查找的内容。

既然看起来您真正想要的只是访问WordPress用户函数,那么最好只包含wp-load.php,它应该允许您在不调用请求解析器的情况下调用这些函数。

票数 13
EN

Stack Overflow用户

发布于 2011-06-01 22:46:51

您可能希望查看接收到的响应的报头。发送带有404响应的文档并不少见,浏览器可能会显示该响应。但它仍然是一个404响应,JQuery会将其视为错误(根据HTTP标准,它实际上就是一个错误)。

票数 6
EN

Stack Overflow用户

发布于 2011-06-01 22:51:12

HTTP 404来自响应的头部-可以有响应内容(通常是一条“糟糕,我们找不到它”的消息),但如果它很小,它会被一些浏览器忽略(IE为小的404做它自己的消息)。

我的猜测是服务器向colorReset.php添加了404HTTP状态头--这是一个PHP/你正在使用的服务器的问题,而不是jQuery的问题。

jQuery的$.get方法只有在您从服务器获得HTTP200状态时才会触发success函数,否则它会触发error函数-因此您仍然可以获得状态为404的十六进制彩色代码。

更新

我认为这里有一些混乱。

  • HTTP404并不意味着您的浏览器找不到页面
  • HTTP404意味着服务器(在本例中为Apache)告诉您它找不到该页面,但它仍然返回包含内容的页面。

如果你在浏览器中访问一个404页面,它只会加载该页面的内容。

如果您通过$.get加载一个404页面,它将触发指定的error方法,但$.get上的构造函数只允许您设置success方法。

如果你这样做了,你的jQuery将会工作:

代码语言:javascript
复制
var myImage = $('#theme :selected').text();

$.ajax({
    url:     '<?php echo get_bloginfo('template_directory') ?>/colorReset.php',
    data:    {theme: myImage, spot: '1'},
    success: function(data){doColor('#theme_header_color', data);},
    error:   function(data){doColor('#theme_header_color', data);}
});

然而,我会先看看为什么你的服务器会返回404 -- colorReset.php可能有一个bug,或者服务器配置可能是错误的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6203013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档