Php jQuery,$.post()未访问目标url
在下面的代码中,有一个XMLHTTPRequest,目标url为Php jQuery,$.post()未访问目标url,php,javascript,json,jquery,Php,Javascript,Json,Jquery,在下面的代码中,有一个XMLHTTPRequest,目标url为test\u location\u jquery.php,尽管触发了success函数,但永远不会访问该文件。当单独运行测试时,test\u location\u jquery.php已成功返回预期的JSON对象。如果您知道在文件未被访问时如何触发成功功能,我们将不胜感激 JQUERY 您的.post()函数是异步的。这意味着调用.post()只会启动post。紧跟其后的行在post()完成之前和调用成功处理程序之前执行 然后,一段
test\u location\u jquery.php
,尽管触发了success函数,但永远不会访问该文件。当单独运行测试时,test\u location\u jquery.php
已成功返回预期的JSON对象。如果您知道在文件未被访问时如何触发成功功能,我们将不胜感激
JQUERY
您的.post()
函数是异步的。这意味着调用.post()
只会启动post。紧跟其后的行在post()
完成之前和调用成功处理程序之前执行
然后,一段时间后调用成功处理程序
所有使用post响应的代码都必须位于成功处理程序中或从成功处理程序调用
因此,您的问题是无法引用成功处理程序中此代码所在的数据集(就在.post()
调用之后)。您必须将此代码放入成功处理程序本身
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
因此,完成此操作后,您的代码将如下所示:
<script>
$(document).ready(function(){
$('#charlie').change(function(){
var charlie_id = $('#charlie option:selected').val();
var DT = "json";
$.post(
'test_location_jquery.php',
{'id':charlie_id,'datatype':DT},
function(data){
alert('Success');
var obj = $.parseJSON(data);
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
}
);
})
})
</script>
$(文档).ready(函数(){
$('#charlie').change(function(){
var charlie_id=$('#charlie option:selected').val();
var DT=“json”;
美元邮政(
“test_location_jquery.php”,
{'id':charlie_id,'datatype':DT},
功能(数据){
警惕(“成功”);
var obj=$.parseJSON(数据);
如果(obj!=“未定义”){
变量位置=对象查找(“位置”);
控制台日志(位置);
}否则{
警报(“故障”);
}
}
);
})
})
您的.post()
函数是异步的。这意味着调用.post()
只会启动post。紧跟其后的行在post()
完成之前和调用成功处理程序之前执行
然后,一段时间后调用成功处理程序
所有使用post响应的代码都必须位于成功处理程序中或从成功处理程序调用
因此,您的问题是无法引用成功处理程序中此代码所在的数据集(就在.post()
调用之后)。您必须将此代码放入成功处理程序本身
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
因此,完成此操作后,您的代码将如下所示:
<script>
$(document).ready(function(){
$('#charlie').change(function(){
var charlie_id = $('#charlie option:selected').val();
var DT = "json";
$.post(
'test_location_jquery.php',
{'id':charlie_id,'datatype':DT},
function(data){
alert('Success');
var obj = $.parseJSON(data);
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
}
);
})
})
</script>
$(文档).ready(函数(){
$('#charlie').change(function(){
var charlie_id=$('#charlie option:selected').val();
var DT=“json”;
美元邮政(
“test_location_jquery.php”,
{'id':charlie_id,'datatype':DT},
功能(数据){
警惕(“成功”);
var obj=$.parseJSON(数据);
如果(obj!=“未定义”){
变量位置=对象查找(“位置”);
控制台日志(位置);
}否则{
警报(“故障”);
}
}
);
})
})
这应该行得通
$.post(
'test_location_jquery.php',
{'id':charlie_id,'datatype':DT},
function(data){
alert('Success');
var obj = $.parseJSON(data);
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
}
);
由于Ajax是异步的,所以在完全调用页面之前,obj变量并不存在。因此,如果将函数(数据)放入函数中,它将仅在调用完成后继续,并且变量现在将存在。这应该可以工作
$.post(
'test_location_jquery.php',
{'id':charlie_id,'datatype':DT},
function(data){
alert('Success');
var obj = $.parseJSON(data);
if(obj != 'undefined'){
var locations = obj.find('location');
console.log(locations);
}else{
alert("failure");
}
}
);
由于Ajax是异步的,所以在完全调用页面之前,obj变量并不存在。因此,如果将函数(数据)放入函数中,它将仅在调用完成后继续,并且变量现在将存在。根据.post()的jQuery文档,该函数的结果永远不会缓存,因此缓存破坏在这里不是问题。post、DELETE和put永远不会缓存在任何HTTP请求中。请参阅.post()的jQuery文档,其结果从不缓存,因此这里不存在缓存破坏问题。post、DELETE和PUT从不缓存在任何HTTP请求中。在您的第一个代码示例中,您正在测试ajax调用下面的(obj!=未定义)。ajax调用是异步的,所以在ajax调用的success函数执行之前,您可能会收到一个警报(“failure”)。您如何知道test_location_jquery.php文件没有被访问?我在test_location_query.php中包含了一些代码,这些代码出于各种原因写入文件。大多数情况下,我使用它来观察文件被访问时的进度,但该文件从未被更改。在您的第一个代码示例中,您正在测试ajax调用下面的(obj!=undefined)。ajax调用是异步的,所以在ajax调用的success函数执行之前,您可能会收到一个警报(“failure”)。您如何知道test_location_jquery.php文件没有被访问?我在test_location_query.php中包含了一些代码,这些代码出于各种原因写入文件。当文件被访问时,我主要是用它来观察进度,但文件从未被更改。谢谢你提供了如此详细和解释得很好的答案。谢谢你提供了如此详细和解释得很好的答案。