从javascript中的php脚本获取数据

从javascript中的php脚本获取数据,php,jquery,ajax,Php,Jquery,Ajax,我尝试在JavaScript中接收PHP响应 我的PHP如下所示: some code if(...) echo "1"; else echo "2"; JavaScript: function GetChoice() { var returned=""; $.ajax({ async: false, cache: false, url: "http://mydomain.

我尝试在JavaScript中接收PHP响应

我的PHP如下所示:

some code if(...) echo "1"; else echo "2"; JavaScript:

function GetChoice() { var returned=""; $.ajax({ async: false, cache: false, url: "http://mydomain.com/script.php", type: "POST", dataType:"text", success: function(data) { returned = data; } }); return returned; } var r = GetChoice(); alert(r); 但是GetChoice不会返回任何结果。怎么了


UPD:如果javascript和php脚本在同一台服务器上,它就可以工作。我在不同域中的脚本。

GetChoice在成功运行回调之前不会返回任何内容

回调函数是您定义为success参数的函数,在从服务器请求数据之前不会启动


这在AJAX中是异步的,因此使用continue导致GetChoice函数在回调运行之前返回的其余代码将在回调成功运行之前不返回任何内容

回调函数是您定义为success参数的函数,在从服务器请求数据之前不会启动

这在AJAX中是异步的,因此带有continue的其余代码会导致GetChoice函数在回调运行之前返回

    function GetChoice() {
    var returned = "";
    $.ajax({
        async:false,
        cache:false,
        url:"http://mydomain.com/script.php",
        type:"POST",
        dataType:"text",
        success:function (data) {
            alert(data);
        }
    });
}
试试这个:

    function GetChoice() {
    var returned = "";
    $.ajax({
        async:false,
        cache:false,
        url:"http://mydomain.com/script.php",
        type:"POST",
        dataType:"text",
        success:function (data) {
            alert(data);
        }
    });
}
试试这个:

temp1.php

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>


  function GetChoice() {
        var returned = "";
        $.ajax({
                async: false,
                cache: false,
                type: "POST",
                url: "http://localhost/temp2.php",
                data: { name: "John"}
                }).done(function( msg ) {                        
                        returned = msg;
                });
         return returned;
    }

    var r = GetChoice();
    alert(r);

</script>
temp2.php

<?php

        echo $_REQUEST["name"];        
?>
它起作用了

试试这个:

temp1.php

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>


  function GetChoice() {
        var returned = "";
        $.ajax({
                async: false,
                cache: false,
                type: "POST",
                url: "http://localhost/temp2.php",
                data: { name: "John"}
                }).done(function( msg ) {                        
                        returned = msg;
                });
         return returned;
    }

    var r = GetChoice();
    alert(r);

</script>
temp2.php

<?php

        echo $_REQUEST["name"];        
?>
它起作用了

这是脚本

<script type="text/javascript">
$.ajax({
async:false,
cache:false,
url:"http://path.com/to/file",
type:"POST",
dataType: "html",
data: 'data',
success: function(data){
    alert(data);
}
});

在PHP文件中编写以下代码

<?php

function test()
{
    $str = 'This is php file';
    return $str;
}

echo test();

?>
确保php文件的路径正确,并将脚本添加到另一个php文件中。基本上你需要2个文件。刚刚在我的编辑器和works中测试了这一点。

这是脚本

<script type="text/javascript">
$.ajax({
async:false,
cache:false,
url:"http://path.com/to/file",
type:"POST",
dataType: "html",
data: 'data',
success: function(data){
    alert(data);
}
});

在PHP文件中编写以下代码

<?php

function test()
{
    $str = 'This is php file';
    return $str;
}

echo test();

?>

确保php文件的路径正确,并将脚本添加到另一个php文件中。基本上你需要2个文件。刚刚在我的编辑器和works中对此进行了测试。

在您的示例中,问题是,$.ajax立即返回,下一条语句return result;,在调用作为成功回调传递的函数之前执行。 下面是解释。


幸运的是,

在您的示例中,问题是$.ajax立即返回,下一条语句return result;,在调用作为成功回调传递的函数之前执行。 下面是解释。



幸运的是,

如果您使用Firefox Firebug,那么如果您得到任何ajax响应,您可以在Net选项卡中进行检查。在真实的php代码上检查$\u POST参数。您为什么使用绝对路径?是否来自同一台服务器?如果使用FF或Chrome,则可以使用开发工具,然后查看服务器返回的响应。$。ajax应该在开发者工具Chrome的网络选项卡中记录请求。单击请求,然后单击响应以查看服务器返回的内容。可能您的服务器没有发送任何信息?如果您使用Firefox Firebug,那么您可以在Net选项卡中检查是否收到任何ajax响应在您的真实php代码上检查$\u POST参数为什么使用绝对路径?是否来自同一台服务器?如果使用FF或Chrome,则可以使用开发工具,然后查看服务器返回的响应。$。ajax应该在开发者工具Chrome的网络选项卡中记录请求。单击请求,然后单击响应以查看服务器返回的内容。也许您的服务器没有发送任何信息?除了他已经用async:false表示这是一个同步调用,除了他已经用async:false表示这是一个同步调用,我如何解决它?我想在domain2.com的网站上获取接收表单php脚本,该脚本在domain1.com的javascript中。如果这是跨域问题,请确保您的php脚本通过添加'header'Access-Control-Allow-Origin:';'在PHP脚本中任何输出之前。我如何解决它?我想在domain2.com的网站上获取接收表单php脚本,该脚本在domain1.com的javascript中。如果这是跨域问题,请确保您的php脚本通过添加'header'Access-Control-Allow-Origin:';'在PHP脚本中的任何输出之前。这只起作用,因为“localhost”是示例中的域,并且两个脚本都在其上运行。OP说他们的脚本在两个不同的域上。PHP脚本需要在任何输出之前添加额外的头…'标题'Access-Control-Allow-Origin:';'此外,在本例中,temp1.php不是php,而是调用javascript资源的HTML。Jus说'n'。这只是因为在您的示例中'localhost'是域,并且两个脚本都在其上运行。OP说他们的脚本在两个不同的域上。PHP脚本需要在任何输出之前添加额外的头…'标题'Access-Control-Allow-Origin:';'此外,在本例中,temp1.php不是php,而是调用javascript资源的HTML。现在是2018年,这真的应该是公认的答案。现在是2018年,这真的应该是公认的答案。