【问题标题】:How do I make a jQuery POST function open the new page?如何让 jQuery POST 函数打开新页面?
【发布时间】:2010-04-19 02:49:29
【问题描述】:

我知道 HTML 中的提交按钮可以提交打开目标页面的表单,但是我如何导致 jQuery ajax 调用将信息发布到新页面并显示新页面。我正在提交通过单击元素(切换名为“select”的新类)收集的信息,然后将这些项目的标识符与新类添加到字符串中并发布到新页面。这个新页面将使用此数据提供上一页选择的摘要。我目前可以让它将数据发布到一个新的 PHP 页面,但它似乎是 ajax 函数只是保留在当前页面上(这对某些事情来说很好,只是不是这个),而不是重定向到新页面。我该怎么做呢?

这是脚本部分:

//onload function
$(function() {

//toggles items to mark them for purchase
//add event handler for selecting items
$(".line").click(function() {
    //get the lines item number
    var item = $(this).toggleClass("select").attr("name");
    });

$('#process').click(function() {
    var items = [];

    //place selected numbers in a string    
    $('.line.select').each(function(index){
            items.push($(this).attr('name'));
            });

    $.ajax({
            type: 'POST',
            url:  'additem.php',
            data: 'items='+items,
            success: function(){
                $('#menu').hide(function(){
                    $('#success').fadeIn();             
                    });
                }   
            });
    });
    return false;
});

任何指针都会很棒!谢谢


编辑: 感谢您的帮助,我已将脚本更改为:

//onload function
    $(function() {

    //toggles items to mark them for purchase
    //add event handler for selecting items
    $(".line").click(function() {
        //get the lines item number
        var item = $(this).toggleClass("select").attr("name");
        });    

$('#process').click(function() {
    var items = [];

    //place selected numbers in a string    
    $('.line.select').each(function(index){
            items.push($(this).attr('name'));
            });
    $('#items').attr('value',items);
    $('#form').submit()

    });
    return false;
});  

【问题讨论】:

    标签: javascript jquery html forms


    【解决方案1】:

    首先,我不鼓励在这里使用 ajax,因为您没有将它用于预期目的,并且您正在强制它重新加载。

    你可以在ajax的成功中做这样的事情

    success: function(){
               window.location = "the new url you wanted to load";       
             } 
    

    编辑:

    为什么不将表单操作属性设置为您要发布到的页面的普通帖子,您可以访问该已发布页面中表单的所有变量,或者您可以连接或存储在数组中的所有值和将此数组存储在隐藏变量中,并在发布的脚本中访问此变量。

    【讨论】:

    • 感谢您的回答。 $.submit() 函数是否更合适,如果是这样,我如何以这种方式发送带有表单的 jQuery 计算数据
    • @ciclistadan:用建议更新了答案
    • 那么最好将我要发布的字符串附加到隐藏的表单元素,然后使用提交按钮?
    【解决方案2】:

    根据定义,Ajax 帖子不会加载到页面。但是您可以在 success 处理程序中做任何您想做的事情。所以只需在此处更改文档位置:

    success: function(){
        $('#menu').hide(function(){
            $('#success').fadeIn();             
        });
    
        window.location = 'http://www.example.com/elsewhere';
    }
    

    POST 通常会返回 HTTP 301 或 302 重定向。在这种情况下,您可以从 XHR 对象中获取返回的标头信息,该信息被传递到回调函数中。

    complete: function( xhr ) { 
        // assume we got a redirect; the new URL will be in the Location header
        window.location = xhr.getResponseHeader( 'Location' );
    }
    

    【讨论】:

    • 酷,听起来我可能错误地处理了这个问题。我要发送的唯一信息是将具有特定类的所有元素的 id 发送到新页面,我该怎么做?
    • 我不明白您所说的“发送...到新页面”是什么意思。这不是您已经在使用 Ajax POST 做的事情吗?
    • 那是正确的,我发布数据,我希望这个页面也能显示
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    相关资源
    最近更新 更多