0

这是我的代码

// when the DOM is ready
    $(document).ready(function() {
    // 'click' because IE likes to choke on 'change'
    $('input[name=passedparameter]').click(function(e) {
        // prevent normal, boring, tedious form submission
        e.preventDefault();
        // send it to the server out-of-band with XHR
        $.post('http://localhost/topostthepost.php', function() {
            data: $(this).val(),
            success: function(resp) {
                if(resp == '1') {
                    alert('Saved successfully');
                } else {
                    alert('Oops, something went wrong!');
                }
            }
        });
    });
});

我是 jQuery 新手,即使在 javascript 中也是如此,
但据我所知,这在逻辑上是可能的并且是正确的代码,

-当我打开响应页面时,(http://localhost/topostthepost.php),我很好,-我
使用 php 框架,所以我需要发布“ http://localhost/”所以我得到了正确的 url,
-当我运行页面时,它不会做任何事情,我检查元素(Chrome)它,它会发出警告unexpected token

我错过了什么?http://是jquery/javascript 拒绝$.post吗?

PS:代码归功于karim79

4

2 回答 2

4

这是非常微妙的:

// when the DOM is ready
    $(document).ready(function() {
    // 'click' because IE likes to choke on 'change'
    $('input[name=passedparameter]').click(function(e) {
        // prevent normal, boring, tedious form submission
        e.preventDefault();
        // send it to the server out-of-band with XHR
        $.post('http://localhost/topostthepost.php', function() {
        // Problem is here ========================= ^^^^^^^^^^   <<==========
            data: $(this).val(),
            success: function(resp) {
                if(resp == '1') {
                    alert('Saved successfully');
                } else {
                    alert('Oops, something went wrong!');
                }
            }
        });
    });
});

它不应该在function那里,你传递的是一个对象。使用function, :aftersuccess成为语法错误。(后面data的很好,因为它看起来像一个标签,但是行尾的逗号表示我们仍在表达式中,所以:后面success是罪魁祸首。)

但请注意,这不是您的调用方式$.post,它与您的调用方式相似$.ajax。这是没有语法错误并切换到的更新代码$.ajax

// when the DOM is ready
    $(document).ready(function() {
    // 'click' because IE likes to choke on 'change'
    $('input[name=passedparameter]').click(function(e) {
        // prevent normal, boring, tedious form submission
        e.preventDefault();
        // send it to the server out-of-band with XHR
        $.ajax({
            url:     'http://localhost/topostthepost.php',
            type:    'POST',
            data:    $(this).val(),
            success: function(resp) {
                if(resp == '1') {
                    alert('Saved successfully');
                } else {
                    alert('Oops, something went wrong!');
                }
            }
        });
    });
});

但是,这一点看起来仍然很狡猾:

data:    $(this).val(),

这意味着您正在将一个字符串传递给调用。如果你给出一个字符串,它必须已经被正确编码。因此,您必须对其进行编码,或者传递一个对象,以便 jQuery 可以为您编码:

data:    {someParameterName: $(this).val()},

...someParameterName服务器将在表单数据服务器端查找的内容在哪里。那就是将一个对象作为data参数传递给调用。该对象(在这种情况下)只有一个我在someParameterName上面调用过的属性,其值来自$(this).val().

当您将 a 发送POST到系统时,默认情况下它是application/x-www-form-urlencoded数据,它基本上由名称和值组成——例如,表单字段名称和这些字段的值。所以在上面,我发送了一个字段名称 someParameterName和来自$(this).val(). 因为我们data作为对象传递,jQuery 将为我们处理名称和值的编码。

在接收 的服务器上POST,它会使用字段名称someParameterName) 查找发布数据以获取值。

显然,您会使用比someParameterName.

这是一个给出多个字段的假设示例:

data: {
    firstName: $("input[name=firstName]").val(),
    lastName:  $("input[name=lastName]").val()
}

在那里我发布了两个字段(参数),名称firstNamelastName.

于 2013-07-11T06:42:58.227 回答
0

我认为错误是因为这条线$.post('http://localhost/topostthepost.php', function() {

试试这个:

$(document).ready(function() {
    // 'click' because IE likes to choke on 'change'
    $('input[name=passedparameter]').click(function(e) {
        // prevent normal, boring, tedious form submission
        e.preventDefault();
        // send it to the server out-of-band with XHR
        $.post('http://localhost/topostthepost.php', {data: $(this).val()}, function(resp) {
            if (resp == '1') {
                alert('Saved successfully');
            } else {
                alert('Oops, something went wrong!');
            }
        });
    });
});
于 2013-07-11T06:43:55.890 回答