JQuery Ajax POST在没有发出请求的情况下抛出一个空错误

时间:2013-04-24 02:09:42

标签: javascript ajax jquery post

我有一个函数可以为任何锚点发出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);
        }
    });
 }

当调用该函数时,params就是这些(从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请求的有效方式(不需要表单)。

我在功能上做错了吗?为什么错误信息为空?

由于

编辑:

我一直在想,当使用serialize函数(例如“var data = $(this).serialize();”)创建变量“data”时,函数有效的“表单”中的POST。当我在没有“表单”的情况下发布POST时,“数据”的格式是不是错了?也许JQuery Ajax函数在发出POST时不接受像“partial = yes”这样的简单字符串作为数据。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

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

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

不幸的是,当我再次删除缓存时,我的请求就好像从未出现过问题一样。似乎设置cache:false做了“点击”。

哦,好吧。

答案 1 :(得分:0)

只是一个猜测,但在docs中,type参数包含所有大写字母,即'POST'而不是'post'

答案 2 :(得分:0)

尝试:

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参数进行硬编码,只是为了查看是否有效。

答案 3 :(得分:0)

无法解决问题,也无法找到原因。虽然,我通过使用方法' POST'使用隐藏的空表单而不是锚点找到了解决方法。对于表单,该功能运行良好。

感谢您的回答