2013-10-16 39 views
0

我想获得一个jQuery ajaxPrefilter与下面的JS代码一起工作。这里是我用来调用ajax函数的代码。jQuery ajaxPrefilter和表达式引擎

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

我也来到这个问题,并不能解决它。如果计划要创建一个新的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代码。

希望这会有所帮助。

+0

我尝试使用您的PHP代码将XID_SECURE_HASH返回到JS的html页面。我还在AJAX调用成功时使用了EE.XID,并使用了表达式引擎提供的ajaxPrefilter。该页面仍然不会提交。我认为AJAX预过滤器存在错误。你有没有使用完全相同的预滤器代码?我试图将prefilter代码放在submitform函数中无济于事。感谢您的帮助 –

+0

我放弃了AJAX预滤器,因为它不适合我。对于表单,您可以在AJAX调用之前在“submitForm”函数内添加到隐藏的输入字段,如“$('input [name =”XID“]').val(EE.XID)”。或者您可以在表单字段本身中调用XID_SECURE_HASH,如““/>”。 – Ufb007