【问题标题】:Ajax call always end up in error handlerAjax 调用总是在错误处理程序中结束
【发布时间】:2026-01-31 07:35:01
【问题描述】:

我正在尝试使用 ajax 调用从服务器获取文本值('selected crate')。 Ajax 调用是:

var selected_crate ='';

$.ajax({
    url: OC.linkTo('crate_it', 'ajax/bagit_handler.php')+'?action=get_crate',
    type: 'get',
    dataType: 'text/html',
    success: function(data){
        selected_crate = data.responseText;
        $('#crates option').filter(function(){
            return $(this).attr("id") == selected_crate;
        }).prop('selected', true);
    },
    error: function(data){
        var e = data.responseText;
        alert(e);
    }
});

而服务端代码sn-p是:

case 'get_crate':
    $msg = $bagit_manager->getSelectedCrate();
    print $msg;
    break;

我想在成功后做点什么,但这个调用总是在错误处理程序中结束。如果有完整的处理程序,它将进入该处理程序。但我想同时使用成功和错误处理程序,因为我想

  1. 如果服务器端出现问题,则发送错误响应
  2. 在客户端取得成功

我正在努力实现这一目标。为什么这个调用总是在错误处理程序中结束,我如何才能真正发送关于这个调用的错误响应,如果发生任何错误,最终会在错误处理程序中,否则成功响应?

【问题讨论】:

  • 响应的状态码是什么?
  • 状态为 200,状态文本为“OK”
  • 您是否尝试过删除dataType 选项? 'text/html' 无论如何都不是有效值。
  • 是的,你是对的。当我删除数据类型时它可以工作。那么实际的数据类型是什么?我是古玩...非常感谢菲利克斯
  • 它告诉 jQuery 响应的格式,以便 jQuery 可以为您做一些预处理。请参阅api.jquery.com/jQuery.ajax(在选项列表中查找dataType)。

标签: php javascript jquery error-handling


【解决方案1】:

如果 URL 正确,那么试试这个:

dataType: "html"

见:http://api.jquery.com/jQuery.ajax/

【讨论】:

    【解决方案2】:

    查看是否在错误处理程序中检索数据如果数据被正确检索,这意味着您的数据类型与 ajax 调用中的响应不匹配[请参阅您的服务器代码,在这种情况下它必须返回一些额外的值]

    【讨论】:

    • 数据被正确检索,所以我猜是数据类型不匹配。如何找出数据类型是什么?无论如何,从服务器端,如您所见,我打印了一条短信。不知道php在后台做了什么。
    【解决方案3】:

    网址:OC.linkTo('crate_it', 'ajax/bagit_handler.php')+'?action=get_crate',

    代替这个直接尝试url,比如

    网址:www.yoursite.com/ajax/bagit_handler.php?action=get_crate

    我认为它会帮助你获得成功。

    【讨论】: