点击无线电上的jquery意外令牌

时间:2013-07-11 06:37:03

标签: javascript jquery html

这是我的代码

// 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),我很好,
-im使用php框架,所以我需要发布“http://localhost/”所以我得到了正确的网址,
- 当我运行页面时,它不会做任何事情,我检查元素(Chrome)它,它警告unexpected token

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

PS:代码抵免karim79

2 个答案:

答案 0 :(得分: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:之后的success会出现语法错误。 (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()

当您向系统发送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

答案 1 :(得分: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!');
            }
        });
    });
});