【问题标题】:Get data from php script in javascript从javascript中的php脚本获取数据
【发布时间】:2012-05-11 16:55:26
【问题描述】:

我尝试在我的 JavaScript 中接收 PHP 响应。

我的 PHP 看起来像这样:

一些代码

    if(...) echo "1";

    否则回显“2”;

JavaScript:

函数获取选择(){ 变种返回=“”; $.ajax({ 异步:假, 缓存:假, url: "http://mydomain.com/script.php", 类型:“发布”, 数据类型:“文本”, 成功:函数(数据){ 返回=数据; } }); 返回返回; } var r = GetChoice(); 警报(r);

但是GetChoice() 什么也没返回。怎么了?

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

【问题讨论】:

  • 如果您使用 Firefox Firebug,那么您可以在 Net 选项卡中查看是否收到任何 ajax 响应
  • 在您检查 $_POST 参数的地方发布您的真实 php 代码
  • 为什么要使用绝对路径?是否来自同一台服务器?
  • 如果您使用 FF 或 Chrome,您可以使用开发工具,然后查看从您的服务器返回的响应是什么。 $.ajax 应该在开发者工具 (Chrome) 的“网络”标签中记录一个请求。单击请求,然后单击响应以查看服务器发回的内容。也许你的服务器没有发回任何东西?

标签: php jquery ajax


【解决方案1】:

试试这个:

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"];        
?>

它的工作......!

【讨论】:

  • 这仅适用于 'localhost' 是您示例中的域,并且两个脚本都在其上运行。 OP 说他们的脚本位于两个不同的域中。 PHP 脚本需要在任何输出之前添加额外的标头...'header('Access-Control-Allow-Origin: *');'另外,在这个例子中,temp1.php 不是 PHP,它是调用 javascript 资源的 HTML。就说吧。
【解决方案2】:

试试这个:

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

【讨论】:

  • 我该如何解决呢?我想在 domain2.com 网站上的 javascript 中接收 domain1.com 上的表单 php 脚本。
  • 如果这是跨域问题,请确保您的 PHP 脚本通过添加 'header('Access-Control-Allow-Origin: *');' 知道这一点在 PHP 脚本中的任何输出之前。
【解决方案3】:

问题是,在您的示例中,$.ajax 立即返回,并且下一个语句 return result; 在您作为成功回调传递的函数甚至被调用之前执行。 这里是解释。 How do I return the response from an asynchronous call?

运气

【讨论】:

  • 现在是 2018 年,这确实应该是现在公认的答案。
【解决方案4】:

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

回调,即您定义为成功参数的函数,在从服务器请求数据之前不会触发。

这是异步的(AJAX 中的 A),因此其余代码继续导致 GetChoice() 函数在回调运行之前返回

【讨论】:

  • 除非他已经使用async: false表明这是一个同步调用
【解决方案5】:

这是脚本

<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个文件。刚刚在我的编辑器中测试了这个并且可以工作..

【讨论】:

    【解决方案6】:
    function GetChoice() {
        var returned="";
        $.ajax({
            url: "../script.php", 
            type: "POST",
            success: function(data) { 
                returned = data;
            }
        });
        return returned;
    }
    
    var r = GetChoice();
    alert(r);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多