2013-03-19 83 views
0

我可以得到以下字符串EDITED可以查看JSON響應200 OK,但返回parsererror

([{"data":{"Rate":"","RoleA":"Student","NameA":"student","RoleB":"Tutor","NameB":"tutorB","Give":"0","Get":"1","Accept":"0"}}]); 

我從http://api.jquery.com/jQuery.ajax/閱讀,但仍然不知道在哪裏我做錯。

這是我的代碼

  $.ajax({ 
         type:   'GET', 
         dataType:  'jsonp', 
         jsonpCallback: 'jsoncallback', 
         data: 
         { 

           nameB: nameB, 
           roleB: roleB, 
           get123: get123, 
           accept: accept 
         }, 
         url: 'http://mydomain.com/check.php?callback=?', 
         success: function(data){ 
          alert(data[0].data.RoleA); 
          //alert("ABC"); 
          //if ($("#role").text() == "Tutor") 
          //{ 
          // window.location.href='tutor_home.html'; 
          //} 
          //else 
          //{ 
          // window.location.href='student_home.html'; 
          //}   
         }, 
         error: function(jqXHR, textStatus){ 
          alert("Request failed: " + textStatus); 
         } 
      }); 

從鉻,我能找到的JSON字符串,它看起來正常。然而,它並沒有提示成功消息,而是它警告parsererror錯誤..我應該改變什麼地方?由於

我的PHP

<?php 

header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
header("Content-type: application/json"); 

include('mysqlConfig.php'); 


$nameB = $_GET["nameB"]; 
$roleB = $_GET["roleB"]; 
$get = $_GET["get123"]; 
$accept = $_GET["accept"]; 

$sql="SELECT * FROM tbl_rating WHERE NameB='$nameB' and RoleB='$roleB' and Get='$get' and Accept='$accept'"; 
$result=mysql_query($sql); 


$rows = array(); 

//retrieve and print every record 
while($r = mysql_fetch_assoc($result)){ 
    // $rows[] = $r; has the same effect, without the superfluous data attribute 
    $rows[] = array('data' => $r); 
} 

// now all the rows have been fetched, it can be encoded 
//echo json_encode($rows); 

$data = json_encode($rows); 
echo $_GET['jsoncallback'] . '(' . $data . ');'; 
?> 

我不知道爲什麼網址如下: 請求URL: http://mydomain.com/check.php?callback=jsoncallback&nameB=tutorB&roleB=Tutor&get123=1&accept=0&_=1363710513593

我不知道它是什麼的最後一個參數&_=1363710513593

,但它可以返回上面的字符串

做它關係到jQuery的版本?我使用jquery-1.9.1.min.js

+0

那你試試?你遇到什麼錯誤? (不要指望我們爲你做功課......) – Martijn 2013-03-19 15:16:20

+0

我試圖改變類型從GET到POST,並試圖改變不同的URL,並且他們都警告「有錯誤」。 。 – HUNG 2013-03-19 15:29:43

+1

你能告訴從這個鏈接'HTTP響應://mydomain.com/check.php nameB = tutorB&roleB =導師&get123 = 1&接受= 0&jsoncallback = mycallback' – vittore 2013-03-19 16:11:41

回答

3

您需要在ajax設置對象(現在稱爲「?」)中指定一個回調名稱。詳細瞭解如何在http://api.jquery.com/jQuery.ajax/上運行。在設置對象中查找「jsonp」。您還需要在PHP代碼中獲取回調名稱並將其返回到響應中,以便該函數在接收到客戶端時執行。 示例:jsoncallback(YOURJSONDATA)。

http://api.jquery.com/jQuery.ajax/

JSONP 類型粘貼:字符串 在JSONP請求重寫回調函數的名字。這個值將被用來代替'callback =?'中的'回調'。部分查詢字符串在url中。所以{jsonp:'onJSONPLoad'}會導致'onJSONPLoad =?'傳遞給服務器。從jQuery 1.5開始,將jsonp選項設置爲false會阻止jQuery將「?callback」字符串添加到URL或嘗試使用「=?」。進行轉化。在這種情況下,您還應該明確設置jsonpCallback設置。例如,{JSONP:假的,jsonpCallback: 「callbackName」}

+0

一切看起來從上面的修改後的代碼罰款,但仍不能返回成功 – HUNG 2013-03-19 15:56:37

+0

我需要得到更多的信息。你指定JSONP和jsonpcallback呢?響應仍與問號開始?難道網址包含您指定的jsonpcallbackname?也許它是在後端某種錯誤? – 2013-03-19 16:17:56

+0

我上面的帖子已經更新,請讓我知道如果u需要更多的信息=( – HUNG 2013-03-19 16:21:26

1

更新:你顯示你的服務沒有返回適當的jsonp有效載荷 修復它使用傳遞的回調名稱,所以你會有以下的響應,當你傳遞在mycallback作爲jsonp回調。

mycallback([{"data":{"Rate":"","RoleA":"Student","NameA":"student","RoleB":"Tutor","NameB"‌​:"tutorB","Give":"0","Get":"1","Accept":"0"}}]); 

更新2:&_=1363710513593 - 添加時間戳,以便讓jQuery的能夠弄清楚發生了什麼相應的JSONP請求,請求的,因爲如何JSONP客戶端上(處理方式,即響應當屬文本,它是在體內嵌入式)

您正在訪問

JSON服務有JSONP支持,所以您需要將您$.ajax配置做JSONP請求及改變JSON回調名jsoncallback

http://api.jquery.com/jQuery.ajax/

$.ajax({ 
       type: 'GET', 
       dataType : 'jsonp', 
       jsonpCallback : 'jsoncallback', 
       data: 
       { 

         nameB: nameB, 
         roleB: roleB, 
         get123: get123, 
         accept: accept 
       }, 
       url: 'http://mydomain.com/check.php', 
       success: function(data){ 
        alert(data[0].data.RoleA); 
       }  
       }, 
       error: function(){ 
        alert('There was an error.'); 
       } 
      }); 

      //return false; 
     }); 
+0

似乎仍然不好,它仍然顯示錯誤 – HUNG 2013-03-19 15:40:09

1

它看起來像你的服務器試圖reutnr jsonp。嘗試加入

dataType: 'jsonp' 

給您的ajax請求並放棄jsoncallback =?參數

例如

$.ajax({ 
       type: 'GET', 
       dataType: 'jsonp', 
       data: 
       { 

         //nameB: nameB, 
         //roleB: roleB, 
         //get123: get123, 
         //accept: accept 
       }, 
       url: 'http://mydomain.com/check.php?nameB=tutorB&roleB=Tutor&get123=1&accept=0&', 
       success: function(data){ 
        alert(data[0].data.RoleA);  
       }, 
       error: function(){ 
        alert('There was an error.'); 
       } 
      }); 

      //return false; 
     }); 
+0

您還需要在請求中設置自定義jsonCallback名稱。改變上述編碼後 – vittore 2013-03-19 15:18:55

+0

仍然警報錯誤... =( – HUNG 2013-03-19 15:39:35