2014-12-02 91 views
0

所以我的ajax调用工作正常,我在Web检查器旁边看到了一个绿灯,我看到正确的参数被发送回来并返回JSON对象。但是,它会自动进入ERROR。我添加了一些错误处理,并已用完想法。Ajax调用保持失败,没有错误

有没有人看到什么?

的Javascript

function getMoreOlder(id) { 
     $.ajax({ 
      url: "getmore.php", 
      type : "POST", 
      dataType : "json", 
      data: { 
       postid : id, 
       type: "later", 
      }, 
      success: function(response){ 
       alert("Success"); 
       for (var i=0; i<json.length; i++) { 
       //  alert("Loop"); 
        } 
      }, 
      error: function(jqXHR,error, errorThrown){ 
        if(jqXHR.status&&jqXHR.status==400){ 
         alert(jqXHR.responseText); 
        }else{ 
         alert("Something went wrong"); 
        } 
      } 
     }); 
    } 

PHP脚本

 $id = $_POST['postid']; 
     $type = $_POST['type']; 

     if($type == "later") { 
     $sql = "CALL `sp_BlogPosts_PageByPostID`('" . $id ."')"; 
     $exec = mysqli_query($conn, $sql); 

     while($fetch = mysqli_fetch_assoc($exec)) { 
      $obj = array(
      "PostID" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['PostID']))), 
      "Title" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['title']))),  
      "Content" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['content']))),  
      "Email" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['email']))),  
      "Username" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['username']))),  
      "Created_At" => stripslashes(substr(trim(mysqli_real_escape_string($conn, $fetch['created_at'])), 0 , 10))); 
       echo json_encode($obj); 
     } 

示例用法

<button onClick="getMoreOlder(1113);"> Load More Posts </button> 

示例返回

{"PostID":"1177","Title":"Off track","Content":"Hi This is a Post", "Email":"[email protected]", "Username":"Abc123", "Created_At":"12-2-14"} 

要点

  • 正确的变量是在POST

  • 发送
  • 正确的信息在POST

  • 返回始终返回错误出事了!

  • Web检查显示POST请求

+1

错误是什么? – 2014-12-02 23:38:53

+2

'json'似乎是未定义的! – 2014-12-02 23:42:45

+0

这可能是一个JSON解析问题。将网络检查员的响应文本粘贴到http://jsonlint.com/ – Phil 2014-12-02 23:43:14

回答

2

问题是你不断地呼应了json_encode 200码,这将使无效JSON输出。

例如:

{"PostID":"1177","Title":"Off track"}{"PostID":"1177","Title":"Off track"} 

这是无效JSON。所以,把你所有的数据到一个数组/对象,然后呼应json_encode

$objArr = array(); 
while($fetch = mysqli_fetch_assoc($exec)) { 
    $objArr[] = array(
     "PostID" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['PostID']))), 
     "Title" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['title']))),  
     "Content" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['content']))),  
     "Email" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['email']))),  
     "Username" => stripslashes(trim(mysqli_real_escape_string($conn, $fetch['username']))),  
     "Created_At" => stripslashes(substr(trim(mysqli_real_escape_string($conn, $fetch['created_at'])), 0 , 10)) 
    );   
} 

echo json_encode($objArr); 

或作为意见建议的同时获取所有数据,并呼应的是,

echo json_encode($exec->fetch_all(MYSQLI_ASSOC)); 

而且你的for循环使用错误的变量

for (var i=0; i<json.length; i++) { 

应该

for (var i=0; i<response.length; i++) { 
+1

那么,他应该停止'stripslashes()''ing和'mysql_real_escape_string''输出,如果有的话,它应该是查询中的'$ id'。同样在他的ajax'success'中,他引用了一个不存在的'json'变量。他想要的是“回应”。无论如何,上述很可能是错误的原因。 +1给你! – Darren 2014-12-02 23:48:49

+3

我只是失去了所有的循环/转义废话和'echo json_encode($ exec-> fetch_all(MYSQLI_ASSOC));退出;' – Phil 2014-12-02 23:49:26