2017-07-26 181 views
0

我的$.post不工作,因为我试图从我的PHP文件中提取JSON数据,我不知道它为什么不显示输出的原因? 这是我的代码。

HTML:

<pre id="love" type="submit" data-toggle="modal" data-target="#myModal" onclick="mymodal(\''+this["id"]+'\')">'+this["love"]+' students <i class="glyphicon glyphicon-heart fa-lg" style="color:red"></i></pre > 

其中this["id"]已经传给mymodal()功能。

javascript代码:

var list=''; 
    function mymodal(id){ 
    $.post('postname_.php',{post_id:id},function(data1){ 
    $.each(data1.result,function(){ 
    list+='<div class="modal fade" id="myModal" role="dialog">'+'<div class="modal-dialog">'+'<div class="modal-content">'+ 
    '<div class="modal-header">'+'<button type="button" class="close" data-dismiss="modal">&times;</button>'+ 
    '<h4 class="modal-title">Students who loved your post</h4>'+' </div>'+'<div class="modal-body">'; 
    list+='<h4 class="text-danger">'+this["finame"]+' '+this['sename']+'</h4>'; 
    list+='</div>'+'<div class="modal-footer">'+ 
    '<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>'+'</div>'+ 
    '</div>'+'</div>'+'</div>'; 
    $('#insert').append(list);}),'json' 
    }); 
    } 

我的PHP代码:

<?php 
require("../vendor/library50-php-5/CS50/CS50.php"); 
CS50::init(__DIR__ . "/../config.json"); 

    $result=array(); 
    $frows3=CS50::query("SELECT * FROM userhit WHERE plove=? AND bypost=?",1,$_POST['post_id']); 
    foreach($frows3 as $frow3){ 
     $frow4=CS50::query("SELECT * FROM userinfopersonal WHERE user_id=? ",$frow3['user_id']); 
    $frow5=CS50::query("SELECT * FROM userprof WHERE user_id=? ",$frow3['user_id']); 
    array_push($result,array('finame'=>$frow4[0]['firstname'],'sename'=>$frow4[0]['secondname'],'url1'=>$frow5[0]['url'])); 

    }echo json_encode(array('result'=> $result)); ?> 

其中CS50 ::查询提供了我的一切我的表行满足给定的查询,没有关于担心,我查这是给予完美的json文件。主要问题是alert功能mymodal()正在工作,这意味着在点击预标签它进入功能,但$.post内部的警报不会执行。

回答

0

它看起来像'json'参数$.post()函数不在正确的函数范围内。查看下面更新的代码(我冒昧地删除了多余的字符串连接 - 我可能是错的,但它似乎没有实用性)。适当的间隔可以帮助捕捉这些语法错误。

var list=''; 
function mymodal (id) { 
    $.post('postname_.php', {post_id: id}, function (data) { 
     $.each(data.results, function (i, result) { 
      list+='<div class="modal fade" id="myModal" role="dialog"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal">&times;</button><h4 class="modal-title">Students who loved your post</h4></div><div class="modal-body">'; 
      list+='<h4 class="text-danger">' + result["finame"] + ' ' + result['sename'] + '</h4>'; 
      list+='</div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div>'; 
      $('#insert').append(list); 
     }); 
    }, 'json'); 
} 

要看到不同之处,这里是以更传统的方式标签的原始代码。

var list=''; 
function mymodal(id){ 
    $.post('postname_.php',{post_id:id},function(data1){ 
     $.each(data1.result,function(){ 
      list+='<div class="modal fade" id="myModal" role="dialog">'+'<div class="modal-dialog">'+'<div class="modal-content">'+ 
      '<div class="modal-header">'+'<button type="button" class="close" data-dismiss="modal">&times;</button>'+ 
      '<h4 class="modal-title">Students who loved your post</h4>'+' </div>'+'<div class="modal-body">'; 
      list+='<h4 class="text-danger">'+this["finame"]+' '+this['sename']+'</h4>'; 
      list+='</div>'+'<div class="modal-footer">'+ 
      '<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>'+'</div>'+ 
      '</div>'+'</div>'+'</div>'; 
      $('#insert').append(list); 
     }),'json' 
    }); 
} 
+0

烨这是一个错误,是现在警报工作正常,但仍然'list'不追加到'#insert' –

+0

尝试使用'$( '#插入')HTML(名单);'有关更多详细信息,请参阅:http://api.jquery.com/Html/。 – Greenstick

+0

仔细一看,'$ .append()'应该可以工作。此代码运行时,DOM树中是否存在'#insert'元素? – Greenstick

0

您的JavaScript代码是正确的(请在网上论坛寻求帮助之前格式化代码)。 https://jsfiddle.net/s295zzmt/

您的HTML代码看起来正确,可能是因为它是从JavaScript代码中复制粘贴的。但是既然你说里面的alert功能正常,让我们忽略它吧。

有两种可能性。

  1. HTTP请求失败
  2. 它在Firefox开发者工具返回无效JSON

检查网络选项卡/ Chrome开发者控制台。确保XHR请求返回200 OK。如果是这样,请检查HTTP响应并确保它是有效的JSON。