我发送一个带有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?
答案 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);
}
});