使用ajax json响应动态设置webos列表选择器选项

时间:2011-05-12 14:34:40

标签: php mysql ajax list webos

我正在尝试开发一个应用程序,它使用ajax post和更新列表选择器从MySQL数据库获取响应,但列表显示为空,可以有人帮我从这里请.....

<。pp的代码:

SecondAssistant.prototype.setup = function() {
this.selectorChanged = this.selectorChanged.bindEventListener(this);
Mojo.Event.listen(this.controller.get('firstselector'), Mojo.Event.propertyChange,     this.selectorChanged);

this.names = [];

try {
    new Ajax.Request('http://localhost/projects/testingasdf.php', {
        method: 'post',
        parameters: {
        'recs': getallrecords,
        'q': q
        },
        evalJSON: 'true',
        onSuccess: function(response){
            var json = response.responseJSON;
            var count = json.count - 1;

            for(i=0; i<count; i++){
                this.names.push({
                    label: json[i].name,
                    value: '0'
                });
            }
                       this.controller.modelChanged(this.model);
        }.bind(this),
        onFailure: function(){
            Mojo.Controller.errorDialog('Failed to get ajax response');

        }

    });

}
catch (e){
    Mojo.Controller.errorDialog(e);
}

this.controller.setupWidget("firstselector",
          this.attributes = {
              label: $L('Name'),
              modelProperty: 'currentName'
          },
          this.model = {
              choices: this.names
          }
        ); 

};

php的代码:

<?php
header('Content-type: application/json');  // this is the magic that sets responseJSON


$conn = mysql_connect('localhost', 'root', '')// creating a connection



mysql_select_db("test", $conn) or die('could not select the database');//selecting database from connected database connection

switch($_POST['recs'])
{
    case'getallRecords':{
        $q = $_POST['q'];

        //performing sql operations
        $query = sprintf("SELECT * FROM user WHERE name= $q");
        $result = mysql_query($query) or die('Query failed:' .mysql_error());
        $all_recs = array();
        while ($line = mysql_fetch_array($result,MYSQL_ASSOC)) {
        $all_recs[] = $line;
        }
        break;
        }   
        }

echo json_encode($all_recs);

// Free resultset
mysql_free_result($result);


// closing connection
mysql_close($conn);
?>

1 个答案:

答案 0 :(得分:1)

我会将模型更新代码移出SecondAssistant.prototype.setup方法,然后在SecondAssistant.prototoype.activate中触发它。

同时调用modelChanged

this.controller.modelChanged(this.model);

bindEventListener上有一个拼写错误 - 应该是bindAsEventListener,而bind的返回应该是另一个对象:

this.selectorChangedBind = this.selectorChanged.bindAsEventListener(this);