代码之家  ›  专栏  ›  技术社区  ›  Alex Mcp

PHP应该生成什么来返回jquery-ajax请求?

  •  1
  • Alex Mcp  · 技术社区  · 16 年前

    也许这是一个语法错误,但我从不这么认为。我有一个非常简单的Ajax测试设置:

    http://www.mcphersonindustries.com/bucket/api.php 是一个简单的文件:

    <?php echo "test"; ?>
    

    我让Apache作为本地主机运行jquery位:

    $(document).ready(function() {
    
    function doAjaxPost() {  
        $.ajax({  
           type: "POST",  
           url: "http://www.mcphersonindustries.com/bucket/api.php",  
           data: "null",  
           success: function(resp){   
               console.log("Response: '" + resp + "'");  
           },  
           error: function(e){  
               console.log('Error: ' + e);  
           }  
        });  
    }  
    
    doAjaxPost();
    
    });
    

    所以萤火虫吐了出来 Response: '' 每一次,但没有任何东西通过请求。我需要用PHP声明一个头吗?我是不是犯了一个愚蠢的错误?

    一如既往地感谢您的洞察力。

    5 回复  |  直到 16 年前
        1
  •  2
  •   dd.    16 年前

    没有该域授权,您不能跨站点Ajax:

    http://ejohn.org/blog/cross-site-xmlhttprequest/

        2
  •  2
  •   cletus    16 年前

    在您的示例中,您的javascript需要返回XML或HTML。您可以对此进行明确说明,但要指定 dataType 参数。那是你想要的吗?如果是这样,PHP应该这样做:

    <?php
    echo '<p>hello world</p>'; // "text/html" is implied
    ?>
    

    另外,我不知道您为什么要在文档内定义函数ready而不是global。也许这是个问题。

    通常人们希望返回JSON,在这种情况下,它应该如下所示:

    <p>What is your name?</p>
    <input type="text" id="name">
    <input type="button" id="send" value="Send">
    

    具有

    $(function() {
      $("#send").click(doAjaxPost);
    });
    
    function doAjaxPost() {
      $.ajax({
        type: "POST",
        url: "http://www.mcphersonindustries.com/bucket/api.php",  
        data: {
          name: $("#name").val()
        },
        dataType: "json",
        success: function(resp) {   
          alert(resp.result);
        },  
        error: function(e){  
          console.log('Error: ' + e);  
        }
      });
    }
    

    和php:

    <?php
    header('Content-Type: application/json');
    $name = $_POST['name'];
    $out = array('result' => 'Hello, ' . $name);
    echo json_encode($out);
    ?>
    
        3
  •  1
  •   Frank Schmitt    16 年前

    如果是单个字符串、数字或布尔值,则可以 echo 它在您的PHP脚本中。如果它是一个更复杂的类型(像一个事物数组或层次结构数据),那么JSON是传输它的最轻量级的方法。

    一般来说,您只需使用一个PHP数组或对象并调用 echo json_encode() 以它为论据。

    要解析它,只需添加 dataType: 'json' 到你的哈希。

        4
  •  1
  •   user287107    16 年前

    您是从同一个主机执行脚本,还是从另一个位置执行脚本?如果是这样,您需要使用jsonp方法。此方法允许创建跨域函数调用。

    在jsonp过程中,调用的javascript为函数创建一个唯一的名称,并通过get请求将其发送给调用脚本。PHP脚本创建一个具有该名称的变量的javascript文件,并将该文件返回给客户机,客户机包含并执行该脚本。

        5
  •  0
  •   Paul Creasey    16 年前

    可能是因为jquery将服务器HTTP响应头中的数据类型派生为text/html,而实际值不是html。

    这似乎是一个伸展,但这是我能想到的一切!