如何使Bing API JSON示例正常工作

时间:2012-01-26 11:42:28

标签: javascript api bing

以下是带有bing的JSON的MSDN网站示例中的示例

我可以获得警告0,但此示例并未调用回调。

<!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 */);

我无法看到请求被放入&#34; searchCallback&#34; SRC

我已经尝试过IE9 FF和Chrome,都不能正常工作:(

1 个答案:

答案 0 :(得分: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);