我试图使用jQuery $ .post方法在点击某个元素时向PHP脚本提交ajax请求。我不关心服务器返回的值 - 我只是想确保我的数据已提交。
但是,接收点击的元素可能包含超链接图像或包含多个链接的flash元素。即使用户离开页面,我怎样才能确保我的脚本收到帖子请求(同样,我不关心它的响应)?我使用下面的代码:
jQuery(document).ready(function($) {
$(".click-track").mousedown(function(e) { // click() will not pass through a flash movie, so we must use mousedown
ad_id = $(this).data("ad-id");
var data = {
action: 'log_click',
adId: ad_id
};
$.ajaxSetup({async: false});
$.post(myscript.php, data, function(data) {
// Do nothing because we don't care about the response
}, 'html');
});
});
我不是浏览器脚本大师,这段代码让我感到沮丧。我很感激你能给予的任何帮助!
答案 0 :(得分:1)
处理Javascript中的重定向,并在收到回复后实现。另外,你可能不想要AJAX - 你可能想要一个同步帖子。
答案 1 :(得分:1)
如果你在mousedown处理程序中执行了e.preventDefault(),你可以在$ .post调用中执行此操作:
$(".click-track").mousedown(function(e) { // click() will not pass through a flash movie, so we must use mousedown
e.preventDefault();
ad_id = $(this).data("ad-id");
var data = {
action: 'log_click',
adId: ad_id
};
$.ajaxSetup({async: false});
var jqxhr = $.post(myscript.php, data, function(data) {
// Do nothing because we don't care about the response
}, 'html');
jqxhr.complete(function(){ $(this).trigger('click'); });
});
这应该创建一个ajax对象,并在POST请求完成时附加一个函数,该函数应该触发对原始mousedown'd元素的单击。我已经将它与非Flash元素一起使用,不确定它是否适用于Flash对象,但它应该。
答案 2 :(得分:0)
如果你想强制你阻止代码直到帖子结束,我建议使用.ajax()代替并将async字段设置为false。像这样:
$.ajax({
//some fields
async:false,
//some more fields
});
现在,您的js将一直阻止,直到呼叫返回。虽然我会警告你这不是首选。
编辑:如果元素是超链接,则需要调用event.preventDefault()。将链接的href属性设置为“javascript:void(0);”也是值得的。