用json响应jQuery ajax请求,怎么样?

时间:2012-02-01 15:38:58

标签: php jquery ajax json

我发送一个带有2个帖子值的ajax请求,第一个是“action”,它定义了我的php脚本要解析的操作,另一个是“id”,它是用户必须解析脚本的id对于。
服务器在array()中返回6个值,然后使用PHP函数编码为JSON:json_encode();
我的一些回复是HTML,但当我将其编码为JSON时,它会转义"/",因此它变为"\/"
我怎么禁用它?

当我得到服务器响应时我不知道如何在jQuery中显示它,我只是认为将它全部放入div只会显示我请求的数字和HTML代码,但它显示数组,因为它是用PHP编码。

PHP

$response = array();
$response[] = "<a href=''>link</a>";
$response[] = 1;
echo json_encode($response);

jQuery的:

$.ajax({
    type: "POST",
    dataType: "json",
    url: "main.php",
    data: "action=loadall&id=" + id,
    complete: function(data) {
        $('#main').html(data.responseText);
    }
});

如何使这个工作JSON?

5 个答案:

答案 0 :(得分:45)

您需要致电

$.parseJSON();

例如:

...
success: function(data){
       var json = $.parseJSON(data); // create an object with the key of the array
       alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>";
    },
    error: function(data){
       var json = $.parseJSON(data);
       alert(json.error);
    } ...

看到这个 http://api.jquery.com/jQuery.parseJSON/

如果您仍然遇到斜杠问题:  搜索security.magicquotes.disabling.php 要么: function.stripslashes.php

注意:

这里的答案适用于那些尝试使用$.ajax dataType属性设置为json的人,甚至是错误的响应类型。在服务器中定义header('Content-type: application/json');可能会解决问题,但如果您要返回text/html或任何其他类型,则$.ajax方法应将其转换为json。我使用旧版本的jQuery进行测试,并且仅在版本1.4.4 $.ajax强制后将任何内容类型转换为传递的dataType。因此,如果您遇到此问题,请尝试更新您的jQuery版本。

答案 1 :(得分:27)

首先,如果您将PHP的标头设置为提供JSON:

,将会有所帮助
header('Content-type: application/json');

其次,它将有助于调整您的ajax调用:

$.ajax({
    url: "main.php",
    type: "POST",
    dataType: "json",
    data: {"action": "loadall", "id": id},
    success: function(data){
        console.log(data);
    },
    error: function(error){
         console.log("Error:");
         console.log(error);
    }
});

如果成功,您收到的响应应该被选为真正的JSON,并且应该将对象记录到控制台。

注意:如果您想要获取纯HTML,您可能需要考虑使用另一种方法来使用JSON,但我个人建议使用JSON并使用模板将其呈现为html(例如Handlebars js)。

答案 2 :(得分:2)

使用带有绑定数据的发送和接收操作码连接您的javascript客户端控制器和php服务器端控制器。因此,您的PHP代码可以作为响应函数delta发送给js recepient / listener

请参阅https://github.com/ArtNazarov/LazyJs

抱歉我的英文不好

答案 3 :(得分:1)

由于您将标记创建为字符串,因此您无法将其转换为json。只需发送它,因为它使用implode方法组合所有数组元素。试试这个。

PHP更改

$response = array();
$response[] = "<a href=''>link</a>";
$response[] = 1;
echo implode("", $response);//<-----Combine array items into single string

JS(将数据类型从json更改为html或者只是不设置它jQuery会搞清楚)

$.ajax({
   type: "POST", 
   dataType: "html", 
   url: "main.php", 
   data: "action=loadall&id=" + id,
   success: function(response){
      $('#main').html(response);
   }
});

答案 4 :(得分:-1)

尝试此代码。您不需要解析函数,因为您的数据类型是JSON,因此它是返回JSON对象。

$.ajax({
    url : base_url+"Login/submit",
    type: "POST",
    dataType: "json",
    data : {
        'username': username,
        'password': password
    },
    success: function(data)
    {
        alert(data.status);
    }
});