【问题标题】:$.post is not working (anywhere)! Why?$.post 不工作(任何地方)!为什么?
【发布时间】:2012-12-10 16:47:47
【问题描述】:

我对 $.post 的调用并没有在我的代码中运行。我没有将请求发送到其他域,实际上,我所做的一切都是本地化的。我的 localhost 别名由 Mac OS X 10.8 自动定义为ramon.local,我从http://ramon.local/linkebuy_0.7/resourceX 请求到http://ramon.local/linkebuy_0.7/resourceY。 Chrome 的控制台上没有错误。

服务器端没有收到请求,我可以通过直接从浏览器访问(输​​入 URL)来检查它。

不只是一个呼叫不起作用,没有一个呼叫不起作用。他们都是工作日前,我怀疑我不小心更改了本地设置的某些内容。会是什么?

这是我所面临的一个例子:

$.post(
    <<CORRECT URL INSIDE THE DOMAIN>>,
    {},
    function(response) {
        console.log('THIS SHOULD BE PRINTED ON CONSOLE');
        alert('THIS SHOULD BE POPPED UP');
    }
);

运行上述代码时,我没有收到警报,也没有收到控制台消息。所以我尝试了以下方法:

$.support.cors = true;
$.ajax({
    url: "http://ramon.local/linkebuy_0.7",
    dataType: "json",
    type: "GET",
    crossDomain: true,
    success: function (data) {
        console.log(data);
    },
    error: function (xhr, status, error) {
        alert(error + " - " + status);
    }
});

我只是带着$.support.cors = true;crossDomain: true 来检查这是否是跨域问题。所以我收到了No Transport - error 的警报。

我能做些什么来解决这个问题?

提前致谢。

【问题讨论】:

  • 当您说“localhosted”时,您的意思是您使用的是对本地 Web 服务器的引用,还是 file:// URL?如果是后者,那么 Chrome 不会让你这样做。
  • 使用 firebug 或 Fiddler 查看调用是否发送到服务器。检查它是否会到达您期望的位置,或者您是否收到 404。由于您使用的是 $.post(),因此您隐藏了失败代码。尝试重新实现为 $.ajax() 并指定一个函数来处理错误。
  • 还要注意主机和端口号必须完全相同相同;您有时不能使用“localhost”,有时不能使用“your-machine-name”。
  • 检查服务器脚本以确保正在接收呼叫。
  • @Pointy 我猜是主机的问题,因为我收到了 AJAX 错误No transport。我正在使用ramon.local wich Mac OSX 10.8 为我自动设置。该页面是通过ramon.local 访问的,我正在向同一个域发送请求,那么,我该怎么办?

标签: javascript jquery ajax post asynchronous


【解决方案1】:

试试这个,看看你是否收到任何警报:

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.post("your url", function() {
    alert("success");
}).success(function() {
    alert("second success");
}).error(function() {
    alert("error");
}).complete(function() {
    alert("complete");
});

// perform other work here ...
// Set another completion function for the request above
jqxhr.complete(function() {
    alert("second complete");
});​

【讨论】:

  • 我在最后一行得到Uncaught SyntaxError: Unexpected token ILLEGAL。不过没有警报。
  • 工作。我得到了errorcomplete。如何检查错误状态?
  • @ramaismon:尝试使用ajaxError。查看传递给回调的thownError参数。
  • 修改错误函数.error(function (request, status, error) { alert(request.responseText); })
  • 收到Object {readyState: 0, status: 0, statusText: "No Transport"}。另外,我尝试使用 $.support.cors = true; 强制 CORS,但它仍然不起作用。
【解决方案2】:

嗯,我用一种很奇怪的方式解决了这个问题。

我删除了 JQuery 文件并重新下载,替换了旧的。碰巧成功了。

所以,如果你是:

  • 发出非跨域的 AJAX 请求;
  • 为此使用 JQuery(例如$.post$.get 等);
  • 遇到No Transport AJAX 错误

然后重新下载并替换你的 JQuery 源

否则,如果您要进行跨域请求(不是这种情况),请查找 JSONP 并尝试在代码开头设置 $.support.cors = true;

感谢大家的cmets和答案。

【讨论】:

  • 你知道为什么之前的 jquery 不工作吗?
  • @AnkitSinghaniya 不知道 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2022-01-23
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多