【问题标题】:$.getJSON calling the wrong URL$.getJSON 调用错误的 URL
【发布时间】:2012-05-15 04:53:51
【问题描述】:

我正在构建或多或少的 Google 日历,但具有更具体的功能/特性。与 Google 日历一样,当用户点击某个事件时,我会使用 ajax 获取请求填充一个“弹出式”div。填充该 div 的 html 包含特定于正在查看的事件的 javascript 函数。当用户使用完弹出窗口后,无论是关闭它还是保存更改,我都会在隐藏之前擦除其中的 html。

现在解决问题: 对于某个事件,有一个两步创建过程 1) 用户单击日历创建一个临时的、可移动的、可调整大小的事件,将其移动到位,单击它以查看确认弹出窗口,确认后调用服务器在数据库中创建事件。

//(start) and (end) are unix timestamps for the beginning and end of the new event
$.getJSON("/events/add/(start)/(end)", function(data) {
    //server returns whether or not the add was successful...
});

现在,一旦确认并且服务器在保存新事件时没有任何问题,弹出窗口的 html 将被删除,弹出窗口被隐藏,并且日历从服务器重新获取事件。就像应该的那样,新事件现在正从数据库馈送到日历中。

当用户点击数据库版本时,我用 view.ctp 填充弹出窗口(我使用的是 cakephp),其中包括一个取消按钮和一个 javascript 函数“cancel()”

这是我不知所措的地方: 我知道按钮正确调用了函数,我已经测试了几种不同的方法。函数内部是另一个 getJSON 请求...

$.getJSON("/events/cancel/(eventId)", function(data) {
    //server returns whether or not cancellation was successful
});

如果我刷新了页面,取消会按预期工作,但如果我尝试在创建事件后立即取消事件(没有先刷新页面),而不是“/events/cancel/(eventId)”网址被调用,"/events/add/(start)/(end)" 被再次调用。

获取 JSON 数据没有问题(当调用正确的 url 时)。事实上,如果您尝试添加与现有事件重叠的事件,它返回的错误消息就是您所期望的。

再次,我知道正在调用正确的 JavaScript 函数,并且我知道每个服务器端函数都在正常工作。只是,出于我不明白的原因,调用了错误的 URL。

我很抱歉用这个来编造这样的故事,我希望我已经包含了足够的信息。我不认为这是我的代码中的问题 - 就像我提到的那样,页面刷新可以防止这个问题。

我尝试将 jquery 的缓存设置为 false。我尝试重命名和重新定位我的 JavaScript 函数,以防止任何潜在的重叠。我尝试将 $.getJSON 更改为简单的 $.get,但问题每次都是一样的。

【问题讨论】:

  • 把事情解释清楚很好,但要获得真正有用​​的帮助,你需要展示(很多)更多代码。

标签: jquery getjson


【解决方案1】:

调试步骤是将其更改为

var url = "/events/cancel/(eventId)";
alert(url);
$.getJSON(url, function(data) {
    //server returns whether or not cancellation was successful
});

【讨论】:

  • 刚刚尝试过,我之前也尝试过其他类似的东西。它会提醒所需的 url,然后以某种方式调用 /events/add 无论如何......
【解决方案2】:

again, i know the right js function is being called

您是如何验证这一点的?

这可能是由多种原因造成的。大多数情况下,这要归功于一些杂散的点击处理程序,您通常可以通过执行

来摆脱它
$('.cancel').unbind('click').click()

或生/死等价物。

一旦你过去了,console.log 该函数中的每个步骤,以确定 URL 被更改的位置。在$.getJSON 请求之前开始。如果它是一个不正确的 url,向上移动直到你到达 url 被切换的位置。

您不能仅仅因为代码在刷新时就可以豁免代码,尤其是当您添加事件时,各种事情都可能发生。

更多代码会有所帮助。

【讨论】:

  • 我通过在不同点放置 alert() 来确认它调用了正确的函数。你对豁免我的代码太鲁莽是非常正确的,我想我刚刚弄清楚我做错了什么,我的上帝这是一个新手错误!
【解决方案3】:
$.getJSON('/events/add/'+ start +'/'+ end, function(data) {

});   

$.getJSON('/events/cancel/'+eventId, function(data) {

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2010-12-16
    • 1970-01-01
    • 2023-03-09
    • 2015-11-12
    相关资源
    最近更新 更多