没有表单元素的jQuery AJAX POST?

时间:2014-06-02 14:49:57

标签: javascript jquery ajax

我没有很多关于AJAX调用的经验,但我的例子似乎很简单(除了我没有使用元素)并且它让我想知道我是否正在进行错误的调用,或者如果你只是没有表单就无法进行AJAX POST。

我正在使用的按钮的HTML是:

<button class="btn btn-primary btn-small" id='saveAsNewName' onclick=saveAsNewName()>Save As</button>

我的JS:

function saveAsNewName(str, id) {
var values = {
        'str'       : str,
        'id'        : id,
};
$.ajax({
    url: "saveAsNewName.php",
    type: "POST",
    data: values,
    dataType: 'JSON',
    success: function(data){
        alert("success" + data);
    }
})
.done(function(data) {
    alert("success" + data);
})
.fail(function(data) {
    alert("failure" + data);
});
}

而且,就目前而言,我的php只是用于测试是否有效:

echo json_encode($_POST['id']));

每次点击我的按钮,我都会收到失败通知。是否有一个特定的解决方法,我不需要使用表单,或者我是否弄乱了基本的.ajax示例?

编辑,要明确:我正在使用另一组jQuery来不断更新saveAsNewName()的参数。结果如下:

onclick="saveAsNewName("wheyjuice 555", "33541")"

这个jQuery代码的结果:

$(document).on('keyup',"[class*=editSimNameField]", function() { 
    var newText = $(this).val(); var id = $(".loadWindow").val();       
    $("#saveAsNewName").attr('onclick', 'saveAsNewName(\"' + newText + '\", \"' + id + '\")'); 
}); 

2 个答案:

答案 0 :(得分:10)

你没有将任何内容传递给onclick上的saveAsNewName()函数,你只是在运行该函数。因此,strid为空值。

这样的事情怎么样,你可以通过ID从元素中获取值:

function saveAsNewName() {
    var values = {
            'str': document.getElementById('elem1').value,
            'id': document.getElementById('elem2').value
    };
    $.ajax({
        url: "saveAsNewName.php",
        type: "POST",
        data: values,
    });

    ...

}

显然,有无数其他方法可以获得价值。

此外,无论HTML标记,表单存在等,您都可以POST到URL

修改:查看有关动态更新onclick属性的评论,我建议您执行两项操作,以便您自行解决此问题。这些说明适用于Chrome,但在Firefox中也可以通过Firebug进行类似操作。

1)使用console.log()上的values功能验证您是否将数据发送到您认为正在发送的功能。例如。 console.log(values),然后在开发人员工具中查看控制台。

2)打开开发人员工具并使用网络标签检查AJAX调用。您实际上可以实时看到呼叫,并可以检查它以查看发送的数据和接收的数据。

答案 1 :(得分:0)

表单值不是必需的,但问题从这里开始:

onclick=saveAsNewName()

请注意,它没有将idstr的值传递给调用。参数数组为空,因此您必须找到传递它们的方法。一种方法是提交处理程序:

$('#myForm').submit(function() {
    var form = $(this);
    //So logic here
    var id = $('#id', form).val();
    var str = 'something';
    saveAsNewName(id, str);
    return false;
});

另一种方法是在saveAsNewName内添加选择器,从文档的其他部分提取idstr的值。