在html本地文件中使用jquery检索json数据

时间:2013-11-27 06:06:54

标签: html json codeigniter

我需要帮助!我想从Codeigniter服务器检索json数据。 这是我的html本地文件(d://myproject/index.html)

$.ajax({
    type: "POST",
    url : serverUrl+'mobcontroller/users/',
    crossDomain: true,
    async: false,
    data : $("#formlogin").serialize(),
    dataType : MobileJsonType[1],
    beforeSend : function(){//do stuff here},
    success : function(responseData) {
        alert(JSON.stringify(responseData));
    },
    error : function(jqXHR, textStatus, errorThrown) {
        // do stuff here    
    },
    complete: function(xhr, settings){
        alert(JSON.stringify(xhr)+'\n'+settings);
    }
 });

和codeigniter控制器看起来像这样

public function index()
{
    $type_message = 'success';
    $message = 'Mobile plateform';
    $this->output->set_header("Access-Control-Allow-Origin: *");
    $this->output->set_header("Access-Control-Expose-Headers: Access-Control-Allow-Origin");
    $this->output->set_status_header(200);
    $this->output->set_content_type('application/json');
    $this->output->_display();
    echo json_encode( array('type_message' => $type_message, 'message' => $message) );
}

我使用js错误

获取json数据响应
Uncaught SyntaxError: Unexpected token : 

请帮助我!

2 个答案:

答案 0 :(得分:0)

将您的成功功能更改为

success: function(data) {
    console.log(data)
} 

让我们知道输出是什么。

我对codeigniter不熟悉,但有可能是$ this-> output-> _display();回声JS试图解析的东西?如果你放置

ob_clean();

以上

 echo json_encode(...

它将清除将要发送回JS的缓冲区,这样只有你编码的JSON才能返回JS可以解析的内容。

答案 1 :(得分:0)

你的ajax请求应该是这样的。

$.ajax({
    type: "POST",
    url : serverUrl+'mobcontroller/users/',
    crossDomain: true,
    async: false,
    data : $("#formlogin").serialize(),
    beforeSend : function(){//do stuff here},
    success : function(responseData) {
        alert(JSON.stringify(responseData));
    },
    error : function(jqXHR, textStatus, errorThrown) {
        // do stuff here    
    },
    complete: function(xhr, settings){
        alert(JSON.stringify(xhr)+'\n'+settings);
    }
 });

我删除了propertydata dataType : MobileJsonType[1]
您也不需要使用JSON.stringify。 由于php json_encode

,返回的结果已经是json了

您所面临的错误归因于beforeSend,因为beforeSend首先命中服务器以检查是否允许请求。如果它发送为true,则实际请求将继续,否则您需要自己处理它。我假设你需要发送一些带有序列化数据的令牌。希望能帮助到你。如果您删除属性beforeSend,我认为该请求将正常工作。