我使用php生成包含在html5标记中的一些json数据,我不确定jquery如何知道要返回的数据类型。
这是php
echo '<section id="stuff">';
echo json_encode($jsonData);
echo '</section>';
要获取section标签内的数据,我正在以这种方式处理我的数据
$.ajax({
url: 'getdata.php',
data: "",
dataType: 'html',
success: function(data)
{
var thedata = $(data).filter('#stuff').html();
var jobject = JSON.parse(thedata);
for(var i = 0; i < jobject.length; i++) {
var item = jobject[i];
这里指定dataType是html但是当我指定json时,什么都没有显示但是get是成功的。
然后我使用jquery获取速记,一切正常。
$.get('getdata.php', function(data) {
var thedata = $(data).filter('#stuff').html();
var jobject = JSON.parse(thedata);
for(var i = 0; i < jobject.length; i++) {
var item = jobject[i];
jquery简写方法是否猜测我的dataType是HTML?。
答案 0 :(得分:1)
dataType为jQuery提供了来自服务器的响应类型的提示,在第一个示例中,jQuery期望响应是文本(嗯,评估了脚本标记的HTML),但是当您在数据类型中指定JSON时,jQuery将尝试将其转换为JavaScript对象,这将失败。
在后一个示例中,jQuery猜测响应是JSON,忽略了过滤器并转换为HTML并将$(data)
作为JavaScript对象处理。
总的来说,我认为没有理由在HTML中封装您从服务器编码的JSON对象,这应该像任何其他对象一样进行结构化和解析。
<section id="stuff">
'{ "Object": [{"Value" : "1", "Text" : "2 in HTML"},{"Value" : "2", "Text" : "3 in HTML"}] }'
</section>
var json = '{ "Object": [{"Value" : "1", "Text" : "2"},{"Value" : "2", "Text" : "3"}] }'
var jobject = JSON.parse(json);
for(var i = 0; i < jobject.Object.length; i++) {
var item = jobject.Object[i];
alert(item.Value);
}
var jsonInHtml = $("#stuff").html();
var jobject = JSON.parse(jsonInHtml);
// A JavaScript object won't be frmed at this point
for(var i = 0; i < jobject.Object.length; i++) {
var item = jobject.Object[i];
alert(item.Value);
}