簡體   English   中英

通過ajax傳遞格式不正確的JSON

[英]Improperly formatted JSON being passed through ajax

嘿,這里的錯誤真令人沮喪。 我有一個JSON格式的數組,我正在通過AJAX從PHP腳本傳遞給javascript,盡管我已經通過驗證器運行了輸出的JSON,但是javascript在jQuery.parseJSON()步驟中仍然失敗,這給了我一個錯誤。
錯誤是Uncaught Syntax Error unexpected token <

任何人都知道可能是什么問題嗎?

<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
function showHint(str)
{
  var xmlhttp;
  if (str.length==0)
  { 
    document.getElementById("txtHint").innerHTML="";
    return;
  }
  if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else
  {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      var data=xmlhttp.responseText;
      document.getElementById("txtHint").innerHTML=data;
      var jsonData = jQuery.parseJSON('{"name":"John"}');
      alert("Got here Second!");
      document.getElementById("hints").innerHTML = jsonData[0][1];
      alert("Probably failed...");
    }
  }
  xmlhttp.open("GET","getSuggestion.php?q="+str,true);
  xmlhttp.send();
}
</script>
</head>
<body>

<h3>Start typing a name in the input field below:</h3>
<form action=""> 
First name: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>Suggestions: <span id="txtHint"></span></p> 
<p>Actual Hints: <span id="hints"></span></p> 

</body>
</html>

PHP:

<?php
header('Content-type: application/json');
function getHint($companyName)
{
    try
    {
        $first = getJson($companyName);
        $temp = strpos($first, "(") + 1;
        $second = substr($first, $temp, strlen($first) - $temp - 1);//this line produces valid JSON
        $json = json_decode($second,true);
    }
    catch(Exception $e)
    {
        echo "caught Exception " , $e->getMessage();
    }
    return $json;
}
function getJson($companyName)
{
    $partial = urlencode($companyName);
    $searchURL = "http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=" . $partial . "&callback=YAHOO.Finance.SymbolSuggest.ssCallback";
    $filesize = 4000;
    $handle = fopen($searchURL,"r");
    $jsonData = fread($handle,$filesize);
    fclose($handle);
    return $jsonData;
}
$q=$_GET["q"];
$roof = getHint($q);
//TODO: kill if no suggestion
$collection = $roof[ResultSet][Result];
echo json_encode($collection);
?>

樣本JSON

[{"symbol":"A","name":"Agilent Technologies Inc.","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"^DJI","name":"Dow Jones Industrial Average","exch":"DJI","type":"I","typeDisp":"Index"},{"symbol":"AAPL","name":"Apple Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"BAC","name":"Bank of America Corporation","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"FNMA","name":"Federal National Mortgage Association","exch":"OBB","type":"S","exchDisp":"OTC BB","typeDisp":"Equity"},{"symbol":"T","name":"AT&T, Inc.","exch":"NYQ","type":"S","exchDisp":"NYSE","typeDisp":"Equity"},{"symbol":"AFFY","name":"Affymax, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"AMZN","name":"Amazon.com Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"DIA","name":"SPDR Dow Jones Industrial Average","exch":"PCX","type":"E","typeDisp":"ETF"},{"symbol":"AUDUSD=X","name":"AUD\/USD","exch":"CCY","type":"C","typeDisp":"Currency"}] 

謝謝你的幫助!

您無需解析JSON代碼。 它已經有效:

看到這個JSFiddle

只需按照以下方式進行操作即可:

Java腳本

for(var i in myArray)
{
  content += "<div class=\"symbol\">";
  content += "Symbol = "+myArray[i].symbol +"<br />";
  content += "Name = "+myArray[i].name+"<br />";
  content += "exch = "+myArray[i].exch+"<br />";
  content += "Type = "+myArray[i].type+"<br />";
  content += "</div>";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM