0

我正在使用 php 生成一些包装在 html5 标记中的 json 数据,但我不确定 jquery 如何知道要返回的数据类型。

这是php

echo '<section id="stuff">';
echo json_encode($jsonData);
echo '</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 时,没有显示任何内容,但获取成功。

然后我使用 jquery get shorthand 一切正常。

$.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?

4

1 回答 1

1

dataType 为 jQuery 提供了关于来自服务器的响应类型的提示,在您的第一个示例中,jQuery 期望响应为文本(嗯,HTML 与脚本标签已评估),但是当您在数据类型中指定 JSON 时,jQuery 将尝试将其转换为到一个 JavaScript 对象,这将失败。

在后一个示例中,jQuery 猜测响应为 JSON,忽略过滤器和转换为 HTML 并$(data)作为 JavaScript 对象处理。

总的来说,我认为没有理由将您从服务器编码的 JSON 对象封装在 HTML 中,这应该像任何其他对象一样结构化和解析。

<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);
 }

小提琴

于 2013-06-22T13:05:09.397 回答