Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jQuery,$.post()未访问目标url_Php_Javascript_Json_Jquery - Fatal编程技术网

Php jQuery,$.post()未访问目标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()完成之前和调用成功处理程序之前执行 然后,一段

在下面的代码中,有一个XMLHTTPRequest,目标url为
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中包含了一些代码,这些代码出于各种原因写入文件。当文件被访问时,我主要是用它来观察进度,但文件从未被更改。谢谢你提供了如此详细和解释得很好的答案。谢谢你提供了如此详细和解释得很好的答案。