【问题标题】:JQuery Ajax POST throwing an empty error without making the requestJQuery Ajax POST 抛出空错误而不发出请求
【发布时间】: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函数的代码

标签: javascript ajax jquery post


【解决方案1】:

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

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

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

哦,好吧。

【讨论】:

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

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

【讨论】:

【解决方案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”的锚点。对于表单,该函数运行良好。

感谢您的回答

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多