有一个ajax请求将数据发送到WordPress操作,这很好,但我可以完美地接收nonce值,但电子邮件输入没有发送。我知道我的目标是正确的价值。它不想获取电子邮件输入的值。如果我将一个值硬编码到输入中,它会看到它。我需要获得用户输入的值,并将其发送到ajax脚本。代码也在文档加载时运行,并且在表单值呈现之后运行。
输入字段如下所示:
<input type="email" name="cjd_email" id="cjd_email" class="cjd-email-input"/>
jquery选择器看起来像:
var cjd_email = $('#cjd_email').val();
ajax调用是:
$.ajax({
url: cjdAjax.ajaxurl,
type: 'POST',
data: {
action: 'cjd_subscribe',
nonce: cjd_nonce,
email: cjd_email
},
cache: false,
success: function(data) {
var status = $(data).find('response_data').text();
var message = $(data).find('supplemental message').text();
if(status == 'success') {
console.log(message);
}
else {
console.log(message);
}
}
});
感谢:)
我假设您在表单上有一个类,即cjdajax。然后使用serialize方法发送数据,而不是任何其他方法。
$.ajax({
url: cjdAjax.ajaxurl,
type: 'POST',
data: $('.cjdAjax').serialize(),
cache: false,
success: function(data) {
//your code
}
});
根据您使用的浏览器,jQuery/JavaScript可能不支持type=email
,因此valid()
方法可能会返回相当奇怪的值。作为一种替代方案,可以将type=text
与输入验证一起使用。
此外,您应该查看success函数:您尝试将find()
-方法应用于文本,而不是DOM元素。如果服务器返回JSON编码的字符串,则可以更正代码,因此在JavaScript中可以将字符串转换回对象。
在PHP中,可以编写print(json_encode($yourArray, true));
(注意关联键需要true
标志),而
...
success: function(data){
var yourObject = JSON.parse(data);
if (yourObject.responseData === "success")
console.log(yourObject.message);
},...
可以替换相应的当前JavaScript段落。