0

我有一个 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像 as 那样的模式,$c:$b但它正在像$c:{"0":$b}. 如何从 php 脚本返回数组,以便我可以获得有效的 json 响应。

4

2 回答 2

0

我得到了解决方案,为什么在完成 ajax 调用时它总是进入错误函数。在这里,我jsonp在 ajax 调用中进行操作,但在 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 在他的回答中指出的更改一起更改。

于 2012-12-05T18:53:31.750 回答
0

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

<?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();
?> 
于 2012-11-30T15:26:46.317 回答