【问题标题】:Ajax call on an external json object within a php fileAjax 调用 php 文件中的外部 json 对象
【发布时间】:2017-05-17 17:50:35
【问题描述】:

我正在尝试使用来自不同服务器的 ajax 解析外部 php 文件中的 json 文件(技术上是相同的提供程序,但我认为这并不重要)。

无论如何,我在我的 wordpress 网站中从我的数据库创建 json 文件的代码如下:

        <pre>
            <?php


            global $wpdb;
            if(!isset($wpdb))
            {
                require_once('wp-config.php');
                require_once('wp-includes/wp-db.php');
            }

            $result = $wpdb->get_results ( "SELECT * FROM " . $table_prefix . "some_row" );
            print_r(json_encode($result, JSON_UNESCAPED_SLASHES));
            ?>
        </pre>

此文件的 url 是(示例)http://somewebsite.com/phpjson.php

我以这种方式从另一个网址(示例)http://app.someotherwebsite.com 拨打电话:

$(document).ready(function() {
    $(function(){
            $.ajax({
                url: "http://somewebsite.com/phpjson.php",
                type: "GET",
                dataType: "JSON",
                cache: false,
                success: function(markers) {
                   $.each(markers,function(i, val){
                   //do something
              }
    });
});

由于某种原因,我无法调用该文件,可能是因为其他内容的格式,有什么线索吗?

【问题讨论】:

    标签: php jquery mysql json ajax


    【解决方案1】:

    几个问题:

    1. json_encode() 的结果是一个字符串,而不是一个数组。因此,您应该使用echoprint,而不是使用print_r()
    2. 将 JSON 包装在 &lt;pre&gt; 标签中会使 JSON 无效,因此无法被 jQuery 解析。您应该删除 &lt;pre&gt;/&lt;/pre&gt; 标签。
    3. 为获得最佳结果,请确保在输出 JSON 数据之前设置内容类型标头:header('Content-Type: application/json');

    尝试一下,如果它解决了问题,请告诉我们。

    【讨论】:

    • 谢谢!我从来没有明白一件事。我应该在哪里放一个像那个 header('Content-Type: application/json');.?在 php 脚本中还是在 .htaccess 文件中?一开始?在php标签之前?
    • header() 是一个 PHP 函数,所以它必须在 PHP 文件中,介于 &lt;?php?&gt; 之间。由于header() 函数告诉浏览器会发生什么,因此必须在发送任何输出之前调用它(否则会收到headers already sent 警告)。
    【解决方案2】:

    查看文档:http://api.jquery.com/jQuery.ajax/

    crossDomain(默认:同域请求为 false,跨域请求为 true)

    类型:布尔值

    如果您希望在同一服务器上强制执行跨域请求(例如 JSONP) 域,将 crossDomain 的值设置为 true。这允许,对于 例如,服务器端重定向到另一个域。 (添加的版本: 1.5)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      相关资源
      最近更新 更多