2012-01-26 79 views
0

以下是從JSON的MSDN網站實例與冰我怎樣才能讓冰API JSON例如工作

的例子,我可以得到alert0但這個例子不調用回調。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html > 
<head> 
<title>Bing API 2.0 Web Sample</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script id="searchCallback" type="text/javascript" src=""></script> 

<script type="text/javascript"> 


// Replace the following string with the AppId you received from the 
// Bing Developer Center. 
var AppId = "SOME APP ID HERE"; 

// Bing API 2.0 code sample demonstrating the use of the 
// Web SourceType over the JSON Protocol. 
function Search() 
{ 

    var requestStr = "http://api.bing.net/json.aspx?" 

     // Common request fields (required) 
     + "AppId=" + AppId 
     + "&Query=msdn blogs" 
     + "&Sources=Web" 

     // Common request fields (optional) 
     + "&Version=2.0" 
     + "&Market=en-us" 
     + "&Adult=Moderate" 
     + "&Options=EnableHighlighting" 

     // Web-specific request fields (optional) 
     + "&Web.Count=10" 
     + "&Web.Offset=0" 
     + "&Web.Options=DisableHostCollapsing+DisableQueryAlterations" 

     // JSON-specific request fields (optional) 
     + "&JsonType=callback" 
     + "&JsonCallback=SearchCompleted"; 

    var requestScript = document.getElementById("searchCallback"); 
    requestScript.src = requestStr; 
    alert("0"); 
} 

function SearchCompleted(response) 
{ 
alert("1"); 
    var errors = response.SearchResponse.Errors; 
    if (errors != null) 
    { 
     // There are errors in the response. Display error details. 
     DisplayErrors(errors); 
    } 
    else 
    { 
     // There were no errors in the response. Display the 
     // Web results. 
     DisplayResults(response); 
    } 
} 

function DisplayResults(response) 
{ 
alert("2"); 
    var output = document.getElementById("output"); 
    var resultsHeader = document.createElement("h4"); 
    var resultsList = document.createElement("ul"); 
    output.appendChild(resultsHeader); 
    output.appendChild(resultsList); 

    var results = response.SearchResponse.Web.Results; 

    // Display the results header. 
    resultsHeader.innerHTML = "Bing API Version " 
     + response.SearchResponse.Version 
     + "<br />Web results for " 
     + response.SearchResponse.Query.SearchTerms 
     + "<br />Displaying " 
     + (response.SearchResponse.Web.Offset + 1) 
     + " to " 
     + (response.SearchResponse.Web.Offset + results.length) 
     + " of " 
     + response.SearchResponse.Web.Total 
     + " results<br />"; 

    // Display the Web results. 
    var resultsListItem = null; 
    var resultStr = ""; 
    for (var i = 0; i < results.length; ++i) 
    { 
     resultsListItem = document.createElement("li"); 
     resultsList.appendChild(resultsListItem); 
     resultStr = "<a href=\"" 
      + results[i].Url 
      + "\">" 
      + results[i].Title 
      + "</a><br />" 
      + results[i].Description 
      + "<br />Last Crawled: " 
      + results[i].DateTime 
      + "<br /><br />"; 

     // Replace highlighting characters with strong tags. 
     resultsListItem.innerHTML = ReplaceHighlightingCharacters(
      resultStr, 
      "<strong>", 
      "</strong>"); 
    } 
} 

function ReplaceHighlightingCharacters(text, beginStr, endStr) 
{ 
alert("3"); 
    // Replace all occurrences of U+E000 (begin highlighting) with 
    // beginStr. Replace all occurrences of U+E001 (end highlighting) 
    // with endStr. 
    var regexBegin = new RegExp("\uE000", "g"); 
    var regexEnd = new RegExp("\uE001", "g"); 

    return text.replace(regexBegin, beginStr).replace(regexEnd, endStr); 
} 

function DisplayErrors(errors) 
{ 
alert("4"); 
    var output = document.getElementById("output"); 
    var errorsHeader = document.createElement("h4"); 
    var errorsList = document.createElement("ul"); 
    output.appendChild(errorsHeader); 
    output.appendChild(errorsList); 

    // Iterate over the list of errors and display error details. 
    errorsHeader.innerHTML = "Errors:"; 
    var errorsListItem = null; 
    for (var i = 0; i < errors.length; ++i) 
    { 
     errorsListItem = document.createElement("li"); 
     errorsList.appendChild(errorsListItem); 
     errorsListItem.innerHTML = ""; 
     for (var errorDetail in errors[i]) 
     { 
      errorsListItem.innerHTML += errorDetail 
       + ": " 
       + errors[i][errorDetail] 
       + "<br />"; 
     } 

     errorsListItem.innerHTML += "<br />"; 
    } 
} 

</script> 

</head> 
<body onload="Search()"> 
Bing api test 
<div id="output"></div> 
</body> 
<script id="searchCallback" type="text/javascript" src=""></script> 

</html> 

如果我手動請求requestStr我能得到迴應:

if(typeof SearchCompleted == 'function') SearchCompleted({"SearchResponse":{"Version":"2.0","Query":{"SearchTerms":"msdn blogs"},"Web":{"Total":2,"Offset":0,"Results":[{"Title":"MSDN Blogs","Description":"Integrated blog from the Microsoft Developer Network.","Url":"http:\/\/blogs.msdn.com\/","DisplayUrl":"blogs.msdn.com","DateTime":"2012-01-09T22:59:00Z"},{"Title":"Remote Desktop Services (Terminal Services) Team Blog - Site Home ...","Description":"All postings, articles, and other content on this blog are provided 」AS IS」 with with no warranties, and confer no rights. Any code, demo, or sample on this blog ...","Url":"http:\/\/blogs.msdn.com\/b\/rds\/","DisplayUrl":"blogs.msdn.com\/b\/rds","DateTime":"2012-01-11T17:59:00Z"}]}}} /* pageview_candidate */); 

我不能看到的要求如何得到執行後,得到的投入「searchCallback」 SRC

我我試過了IE9 FF和Chrome,都不工作:(

回答

0

如果你只是改變一個現有元素的來源,請求不會啓動,請嘗試以下操作,換行:

var requestScript = document.getElementById("searchCallback"); 
requestScript.src = requestStr; 

有了:

var commScript = document.createElement("script"); 
commScript.src = requestStr; 
commScript.type = "text/javascript"; 
commScript.charset = "UTF-8"; 
//Find the head element such that we can append our communication script 
if(document.head) 
{ 
    head = document.head; 
} 
else if(document.getElementsByTagName) 
{ 
    head = document.getElementsByTagName('head')[0]; 
} 
else 
{ 
    document.write("An error occured"); 
} 
head.appendChild(commScript); 
+0

這真是棒極了!速度加分 – user1171137