10

我有一个对任何锚点发出 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”这样的简单字符串作为数据。对此有什么想法吗?

4

4 回答 4

2

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

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

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

那好吧。

于 2013-11-19T22:05:43.073 回答
0

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

于 2013-04-24T03:36:45.490 回答
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 参数进行硬编码,看看是否有效。

于 2013-04-24T16:43:41.000 回答
0

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

感谢您的回答

于 2013-04-28T18:03:48.273 回答