当我尝试通过json_encode从数据库中检索数据时出错

时间:2015-01-09 14:07:03

标签: php jquery yii

我正在与Yii 1合作,当我尝试通过服务器上的json_encode检索省内的城市时,我遇到了一些问题。

当我检索超过30k的记录时会发生错误。

Unknown error 200 . textStatus: parsererror. errorThrown SyntaxError: Unexpected token <"

另一个用例城市&#39;省工作正常。

JSON可容纳的数量是否有限制?

//PHP Code
public function actionGetDinamicCities() {
    $code = $_POST['code_province'];
    // Busqueda de Registros dependiendo el codigo de Ciudad recibido.
    $cities = City::model()->findAll(array('order'=>'city_name', 
                                                   'condition'=>'state_code=:code_province', 
                                                   'params'=>array(':code_province'=>$code)
                                            ));
    // Creacion de un arreglo clave=>valor para un modelo dado
    $citiesList = generateList($cities, 'id', 'city_name');     
    echo json_encode($citiesList);
}

//JQuery Code
$('#Address_id_province').change(function() {
    var data = { "code_province" : $(this).val() };
    $.ajax({ 
        url: 'GetDinamicCities',
        data: data,
        type: "post",
        dataType: "json",
        success: function (data) {              
            var options = '<option value>Select a City</option>';
            console.log(data);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            getError(jqXHR.status, textStatus, errorThrown);
        }
    });     

function getError(status, textStatus, errorThrown) {
    switch (status) {
        case 404:
            console.log('status: File not found. textStatus: ' + textStatus + '. errorThrown: ' + errorThrown);
        case 500:
            console.log('Status: Server Error. textStatus: ' + textStatus + '. errorThrown: ' + errorThrown);
        case 0:
            console.log('status: Request aborted. textStatus: ' + textStatus + '. errorThrown: ' + errorThrown);
        default:
            console.log('Unknown error ' + status+ ' . textStatus: ' + textStatus + '. errorThrown ' + errorThrown);
    }
}

更新

这是我用来获取城市的代码。各省。我将键和值分开了,因为Chrome和IE按键对它进行排序,我希望按值进行排序。

    $code = $_POST['code_country'];

    $states = States::model()->findAll(array('order'=>'state_name', 
                                               'condition'=>'country_code=:code', 
                                               'params'=>array(':code'=>$code)
                                        ));

    $statesList = generateList($states, 'state_code', 'state_name');

    $statesListSorted = array();        
    $statesListSorted['k'] = array_keys($statesList);  
    $statesListSorted['v'] = array_values($statesList);         
    $json = json_encode($statesListSorted); 

    echo $json;

从服务器处理答案的javascript类似于城市。

1 个答案:

答案 0 :(得分:0)

你的内存不足。两个建议:

  • 推荐:搜索/分页数据。尝试显示30K记录很多,用户通常不想一次看到那么多记录
  • 气馁:更改内存设置请参阅http://www.ducea.com/2008/02/14/increase-php-memory-limit/如果您在托管环境中,可能会也可能不允许
    • php.ini:memory_limit = 32M
    • 以编程方式:ini_set('memory_limit', '64M');