我没有很多关于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 + '\")');
});
答案 0 :(得分:10)
你没有将任何内容传递给onclick上的saveAsNewName()
函数,你只是在运行该函数。因此,str
和id
为空值。
这样的事情怎么样,你可以通过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()
请注意,它没有将id
和str
的值传递给调用。参数数组为空,因此您必须找到传递它们的方法。一种方法是提交处理程序:
$('#myForm').submit(function() {
var form = $(this);
//So logic here
var id = $('#id', form).val();
var str = 'something';
saveAsNewName(id, str);
return false;
});
另一种方法是在saveAsNewName
内添加选择器,从文档的其他部分提取id
和str
的值。