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 时,如何故意在加载的文档中抛出错误?