我正在尝试使用jQuery ajaxPrefilter来处理以下JS代码。这是我用来调用ajax函数的代码。
var $setallow = $(".show");
$setallow.click(function() {
var $allow = $(this).closest("form");
var formData = $allow.serialize();
submitForm(formData);
});
function submitForm(formData) {
$.ajax({
type: "POST",
url: "/schedule_update.php",
data: formData,
dataType: "json",
cache: false,
timeout: 8000,
success: function(data, textStatus, jqXHR) {
},
error: function(data, textStatus, errorThrown) {
}
});
};
这是我想要使用的预过滤器代码。此代码由Expression Engine提供。
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
var old_xid = EE.XID;
jqXHR.setRequestHeader("X-EEXID", old_xid);
jqXHR.complete(function(xhr) {
var new_xid = xhr.getResponseHeader('X-EEXID');
if (new_xid) {
EE.XID = new_xid;
$('input[name="XID"]').filter('[value="'+old_xid+'"]').val(new_xid);
}
});
});
以下是带有表单的HTML代码。
<form>
<input type="hidden" name="XID" value="{XID_HASH}" />
<input type="hidden" name="id" value="1" />
<input type="checkbox" name="allow" value="yes" class="show" />
</form>
如何使这个预过滤器能够使用我的代码?一旦我将预过滤器添加到我的JS代码的任何部分,表单就不再提交到我的php页面来更新数据库了。感谢您提供任何帮助。
答案 0 :(得分:0)
我也遇到了这个问题而无法理解。如果计划是创建一个新的XID代码,为什么不通过php脚本的ajax调用返回它。只需在json_encode函数中添加“XID_SECURE_HASH”,如下所示:
<?php
public function get_new_xid_hash() {
$data = array('XID' => XID_SECURE_HASH, 'otherData' => 'Show this text');
echo json_encode($data);
die();
}
?>
ajax调用的返回可能是这样的:
success: function(data) {
EE.XID = data.XID;
}
因此,当您下次ajax发出请求时,它将包含更新的XID代码。
希望这有帮助。