JQuery Ajax POST 抛出空错误而不发出请求

Posted

技术标签:

【中文标题】JQuery Ajax POST 抛出空错误而不发出请求【英文标题】:JQuery Ajax POST throwing an empty error without making the request 【发布时间】:2013-04-17 10:16:36 【问题描述】:

我有一个对任何锚点发出 Ajax 请求的函数。请求方法可以是 GET 或 POST。在这种情况下,我想在不使用表单的情况下进行 POST,但 Ajax 请求甚至在发送请求之前就会引发错误。错误的值为“error”,所有错误/故障描述变量都是“”。

 function loadPage(url,elem_id,method,data) 
    ajaxLoading(elem_id);
    $.ajax(
        type: method,
        url: url,
        data: data,
        success:function(data)
            $("#"+elem_id).html(data);;
        ,
        error:function(request,textStatus,error)
            alert(error);
        
    );
 

当函数被调用时,参数是这些(从 js 控制台复制):

data: "partial=yes"
elem_id: "page"
method: "post"
url: "/projects/2/follow"

如前所述,这里是调用 loadPage 函数的代码。

$("body").on("click","a.ajax",function(event) 
    var _elem = getDataElem($(this));
    var _method = getRequestMethod($(this));
    var _partial = getRequestPartial($(this));
    handlers.do_request(event,$(this).attr("href"),_elem, _method, _partial);
);

var handlers = (function() 
    var obj = ;
    obj.do_request = function(event,url,elem_id,method,data) 
        event.preventDefault();

        loadPage(url,elem_id,method,data);
        history.pushState(selector:elem_id,method:method,data:data,null,url);
    ;
());

Ajax 请求失败后,默认发出请求并响应成功。在我读过的所有内容中,这似乎是发出 POST 请求的有效方式(不需要表单)。

我在函数中做错了吗?为什么错误信息为空?

谢谢

编辑:

我一直在想,对于来自“表单”的 POST,当使用序列化函数创建变量“数据”时(例如“var data = $(this).serialize();”)。当我在没有“表单”的情况下进行 POST 时,“数据”的格式是否可能在某种程度上是错误的?也许 JQuery Ajax 函数在进行 POST 时不接受像“partial=yes”这样的简单字符串作为数据。对此有什么想法吗?

【问题讨论】:

你是说 request 和 textstatus 变量是空的 post 应该大写吗?它在文档中。 你能贴出代码来显示你是如何调用loadPage的吗? textStatus 的值为“error”,error 的值为“” 添加调用loadPage函数的代码 【参考方案1】:

我刚遇到这个问题,一两个小时后,想尝试将缓存设置为 false。这为我解决了问题。

$.ajax(
    url: url,
    cache: false,
    type: method
);

不幸的是,当我再次删除缓存时,我的请求就像从未出现过问题一样工作。似乎设置 cache:false 使某些东西“点击”。

哦,好吧。

【讨论】:

如果您尝试检索的数据(假设为GET,尽管问题是关于POST)是动态的,则您的服务器回复不应允许缓存。那么cache: false 就不需要了。【参考方案2】:

只是猜测,但在docs 中,类型参数全部大写,即'POST' 而不是'post'

【讨论】:

javascript 是区分大小写的,所以不一定都可以工作。我检查了jQuery源(github.com/jquery/jquery/blob/master/src/ajax.js#L455),看起来他们将类型参数转换为大写,所以我想没关系。【参考方案3】:

试试:

function loadPage(url,elem_id,method,dat) 
    ajaxLoading(elem_id);
    $.ajax(
        type: method,
        url: url,
        data: dat,
        success:function(data)
            $("#"+elem_id).html(data);;
        ,
        error:function(request,textStatus,error)
            alert(error);
        
    );
 

我想知道您是否在使用以关键字命名的变量时遇到问题。如果这不起作用,请尝试不带参数调用 loadPage 并对所有 ajax 参数进行硬编码,看看是否有效。

【讨论】:

现在试过了,没有成功。甚至在没有发送请求的情况下仍然抛出错误。谢谢你的回答。【参考方案4】:

无法解决问题,也找不到发生问题的原因。虽然,我找到了一种方法,通过使用隐藏的空表单而不是带有方法“POST”的锚点。对于表单,该函数运行良好。

感谢您的回答

【讨论】:

以上是关于JQuery Ajax POST 抛出空错误而不发出请求的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery 中使用 $.ajax 时,如何故意在加载的文档中抛出错误?

服务端接收不到ajax post请求的参数

iframe 嵌入代码抛出 403 错误

jQuery Ajax 发布 - 404 错误

为啥grails在第一次访问hasMany关系时抛出空指针异常?

SearchView 展开抛出空指针异常