【问题标题】:AJAX send post request only onceAJAX 只发送一次 post 请求
【发布时间】:2015-06-22 19:31:27
【问题描述】:

我在使用 ajax 时遇到问题,因为它只发送一次我的请求,我有一个 cssmap 插件,并且该插件有 onSecondClick 选项,当我点击它两次时,我可以做某事,我的帖子请求将一些数据发送到 session.php,在 session.php 中我删除了会话,然后我又放了一个。

js 行:

'onSecondClick' : function(e){

        var regionName = e.children("A").eq(0).text(),
        regionHref = e.children("A").eq(0).attr("href"),
        regionClass = e.attr("class").split(" ")[0];

        if(regionClass == "eu13" || regionClass == "eu16" || regionClass == "eu47"){
            //open model success

            $.ajax({
                type: "POST",
                url: 'session',
                data: { country : regionClass },
                cache: false,
                success: function(data){
                    $( "#success" ).click();
                }
            });

            //$( "#success" ).click();
        }else{
            //open model error
            $( "#error" ).click();
        }
    },

PS - url是对的,就是文件的url,会话设置好了,但是只有一次,不会更新。

session.php:

if(Input::get('country')){

    $countries = array(
        'eu13' => 'france',
        'eu16' => 'germany',
        'eu47' => 'united kingdom',
        //end of playable countries, the rest is bots!
        'eu5' => 'belgium',
        'eu27' => 'luxembourg',
        'eu33' => 'netherlands',
        'eu44' => 'switzerland',
        'eu20' => 'ireland'
    );
    if(Session::get('selected');){
        Session::delete('selected');
    }
    Session::put('selected',$countries[Input::get('country')]);

}

成功后,我点击一个按钮,从 Bootstrap 打开一个“模型”。

一切正常,但会话总是返回之前点击的国家,无论我点击多少其他国家,它都不会改变。

我不知道问题是什么,尝试了 e.preventdefault()、cache: false 和其他一些选项,似乎没有任何解决方法。

【问题讨论】:

  • 首先检查您的处理程序onSecondClick 是否被调用。 BTW 听起来像一个点击处理程序,那么你如何绑定它呢?你是否以某种方式替换了这个元素?
  • 您发布的代码没有使用您查询的国家信息。具体来说,ajax 调用中 successhandler 的 data 参数仍未使用。
  • Wolff - 我对 js 和 ajax 有点陌生,所以我不知道你在说什么,点击国家(每次点击都会打开模型)会话的价值未设置。
  • collaspar - Input::get('country') IS $_POST['country'],这就是我使用它的方式。
  • 你确定 session.php 正在像它应该的那样生成一个新会话吗?如果是,而且是模态中显示的信息永远不会改变,我可能知道原因。

标签: javascript php jquery ajax twitter-bootstrap


【解决方案1】:

很难从您的描述中判断问题出在哪里,但如果它是关于演示的(即您可以验证 session.php 是否有效,但模式仍然显示错误信息),这可能是原因。

默认情况下,引导模式仅填充一次内容。之后它将使用 .toggle 来显示或隐藏。

如果你想更新信息,你必须先清除它:

$('body').on('hidden.bs.modal', '.modal', function () {
    $(this).removeData('bs.modal');
});

这将在隐藏/关闭时清除具有 modal 类的模态框的所有内容。当然,您也可以使用 id 选择器,例如 #myModal。

编辑:

试试这个 ajax。警报返回什么?

$.ajax({
    type: "POST",
    url: "session",
    data: { "country": regionClass },
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    cache: false,
    success: function(data){
        alert(data);
        $("#success").click();
    }
});

并在 session.php 的末尾添加类似这样的内容:

echo $countries[Input::get('country')];

(php 不是我的菜。不过我认为这是正确的)

【讨论】:

  • 它不起作用,值不会改变,并且在我刷新之后,显示刷新之前单击的最后一个值,所以我也无法刷新页面,我可以用其他任何方式将值传递给 php ?
  • @user3052629 试试我的新增功能,看看能否让php文件返回数据给ajax。
  • 警报返回点击城市的名称,我在模型中包含了php页面,模型只是在1秒后打开和关闭。
  • 所以看起来 ajax 工作正常,因为它返回正确的名称(不仅仅是类名,而是 session.php 中数组的名称)但是当我尝试包含会话或使用它时,我得到一个国家输入不存在的错误。
  • @user3052629 那么是的,这已经消除了任何其他问题。问题在于会话的设置/获取。我知道我很经典,这样对待会议是不行的。它需要在实际的“清除”和“重新设置”之间进行请求。也许只覆盖现有的会话值会更好? (跳过删除)
猜你喜欢
  • 1970-01-01
  • 2016-08-09
  • 2019-10-15
  • 2018-12-23
  • 2022-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多