我有这个函数(整个代码的一部分):
function helloDear_javascript() { ?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
$("#id").click(function(){
$('.input_triplify').each(function(k,v){
var mk = $(this).attr('mk');
var v = $(this).val();
if(v != 'correspondencia' && $.trim(v) != ''){
$.ajax({
type: "POST",
url: ajaxurl,
data: {action: 'triplify', meta: mk, value: v },//, valores_coluna_posts:
dataType: 'json',
success:
function(data){
console.log(data);
},
error:
function(data){
alert('ocorreu um erro ao acessar o banco, favor pesquisar novamente.');
}
});
}
});
$("#corpo").hide(1000);
$("#corpo2").show(1000);
});
});
</script> <?php
}
问题是:我的朋友正在xampp、windows8.1和wordpress4中运行它。可以,返回console.log(data)。使用相同的代码,我在apache中运行它,xubuntu更新,wordpress4。这是不正常的,总是转到错误的情况。我找不到为什么会发生这种情况,因为是相同的整个代码,DB,web浏览器等。如果我做了更改,将console.log(数据)放在错误的情况下,它会返回(从web浏览器的控制台菜单查看):
Object { readyState: 4, getResponseHeader: .ajax/v.getResponseHeader(), getAllResponseHeaders: .ajax/v.getAllResponseHeaders(), setRequestHeader: .ajax/v.setRequestHeader(), overrideMimeType: .ajax/v.overrideMimeType(), statusCode: .ajax/v.statusCode(), abort: .ajax/v.abort(), state: .Deferred/d.state(), always: .Deferred/d.always(), then: .Deferred/d.then(),
无论我做什么,都不会成功!
谢谢!
很可能您的ajaxurl
包含一些跨域请求值(或者至少这是浏览器的想法——如果您使用LAN IP address /192.168.1.10/
而不是127.0.0.1
或localhost
来访问它)。
正如您所知,JavaScriptAjax跨域请求被拒绝执行(尽管可以绕过此限制)。此限制的目的是阻止您的站点从远程站点读取数据,而不是阻止它发送数据。
例如,你不能让我的浏览器进入我的银行并获取我的账户详细信息,这样你就可以将它们发送到你的网络服务器。
同源策略不会阻止您提交将资金转移到服务器的请求,但这就是为什么网站必须对CSRF攻击进行防御的原因。
尝试在type: "POST"
之后在AJAX请求中添加crossDomain: true,
来测试代码。
编辑:
关于jQuery error
状态的一些解释:如果请求失败,这是一个将被调用的函数(这意味着Linux下的浏览器无法发送正确的XMLHttpRequest
)。
该函数接收三个参数:jqXHR
(在jQuery 1.4.x中,XMLHttpRequest
)对象,一个描述发生的错误类型的字符串,以及一个可选的异常对象(如果发生)。第二个自变量(除了null
)的可能值为timeout
、error
、abort
和parsererror
。当发生HTTP错误时,errorThrown
接收HTTP状态的文本部分,例如Not Found
或Internal Server Error.
。对于jQuery 1.5,错误设置可以接受函数数组。每个函数将依次调用。
注意:对于跨域脚本和跨域JSONP请求,该处理程序不会被调用,这意味着如果您的脚本达到error
条件,则不是跨域请求问题,而是浏览器问题。