无法返回正确的json响应

时间:2012-11-30 15:20:55

标签: php ajax json

我有一个php脚本,其中我有以下功能:

<?php
function readXML() {
    $url = $_REQUEST['schemaPath'];

    $xml = simplexml_load_file($url);

    $fields = $xml -> fields -> field;
    GLOBAL $array;
    GLOBAL $c;
    $array = new stdClass;
    foreach($fields as $field->attributes){
        foreach($field->attributes->attributes() as $a => $b){
            if($a == "name") {
                $c = $b;
            }
            if($a == "type") {
                $array -> $c = $b;
            }
        }
    }
    return json_encode($array);
}
echo readXML();
?> 

我正在通过以下方式进行ajax调用:

$.ajax({
                cache: false,
                url: "readXML.php",
                type: "POST",
                dataType: 'jsonp',
                jsonp: 'jsonp_callback',
                data: { schemaPath: "http://localhost:8983/solr/admin/file/?file=schema.xml" },
                crossDomain: true,
                success:function(data) {
                    if (!data) {
                        alert("Error in processing xml file");
                        return null;
                    } else {                
                        console.log(data);
                    }
                },
                error:function(data) {
                    alert("Error while reading schema file.");
                    $("#loadingStatus").hide();
                }
            });

我没有得到所需的json响应格式。我在响应中收到了警告Error while reading schema file。我实际上希望它像key:value一样$c:$b模式,但它就像$c:{"0":$b}一样。如何从php脚本返回数组,以便我可以有一个有效的json响应。

2 个答案:

答案 0 :(得分:0)

为什么不使用常规的关联数组,而不是使用stdClass。这将以最少的更改来解决您的问题。

<?php
function readXML() {
    $url = $_REQUEST['schemaPath'];

    $xml = simplexml_load_file($url);

    $fields = $xml -> fields -> field;
    GLOBAL $array;
    GLOBAL $c;
    $array = array(); // changed
    foreach($fields as $field->attributes){
        foreach($field->attributes->attributes() as $a => $b){
            if($a == "name") {
                $c = $b;
            }
            if($a == "type") {
                // cast the $c to convert the value from a SimpleXMLObject 
                // to a string for use within the key
                $c = (string)$c; 
                $array[$c] = $b;
            }
        }
    }
    return json_encode($array);
}
echo readXML();
?> 

答案 1 :(得分:0)

我得到了解决方案,为什么在完成ajax调用后它始终会转到错误函数。这里我在ajax调用中正在进行jsonp但是在php脚本中没有处理相同的内容。要解决此问题并返回正确的响应,需要在php脚本中添加以下内容:

if(isset($_REQUEST['jsonp'])) {
        echo $_REQUEST['jsonp'].'('.json_encode($array).')';
    }else{  
        echo json_encode($array);
    }

要将回复设为key:value,需要将$array[$c] = $b;更改为$array[$c] = (string)$b;以及@EmmanuelG在回答中指出的更改。