【问题标题】:How to send additional parameters to success function in jquery ajax如何在jquery ajax中向成功函数发送附加参数
【发布时间】:2018-09-13 03:44:27
【问题描述】:

我有以下 Jquery 代码,我正在尝试根据区域值在 $('.cbs-List').HTML(divHTML); 中显示信息。但是在成功函数中,我无法读取该区域的值,它指出

'数据未定义'

在这种情况下,将参数或值传递给成功函数的正确形式是什么?

$(document).ready(function() {      
    getSearchResultsREST('LA');
});

function getSearchResultsREST(region) {
    var querySA = 'ClientSiteType:ClientPortal* contentclass:STS_Site Region=LA';
    var queryDR = 'ClientSiteType:ClientPortal* contentclass:STS_Site Region=EM';

        if(region == 'LA') {
            var searchURL = _spPageContextInfo.webAbsoluteUrl + "/_api/search/query?queryText='" + querySA + "'";
        } else {
            var searchURL = _spPageContextInfo.webAbsoluteUrl + "/_api/search/query?queryText='" + queryDR + "'";
        }

        $.ajax({
            url: searchURL,
            method: "GET",
            headers: {
                "Accept": "application/json; odata=verbose"
            },
            contentType: "application/json; odata=verbose",
            success: SearchResultsOnSuccess(data, region),
            error: function(error) {
                $('#related-content-results').html(JSON.stringify(error));
            }
        });
    }

    function SearchResultsOnSuccess(data, region) {
        var results;
        var divHTML = '';

        if (data.d) {
            results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;

            if(results.length == 0) {
                $('#related-content-results').html('There is No data for the requested query on ' + _spPageContextInfo.webAbsoluteUrl);
            } else {
                for (i=0; i<results.length; i++) {
                    var item = results[i];
                    var itemCell = item.Cells;
                    var itemResults = itemCell.results;

                    // Get values for item result
                    var _title = getValueByKey("Title", itemResults);
                    var _path = getValueByKey("Path", itemResults);

                    divHTML += '<li><a href=' + _path + '>' + _title + '</li>';
                }

                // Display information based on region.

                $('.cbs-List').html(divHTML);

            }
        }
    }

【问题讨论】:

  • 您必须对属性进行 urlencode:将 encodeURIComponent() 添加到 searchURL 而不是值本身。
  • 你的意思是 if(region == 'LA') { var searchURL = encodeURIComponent(_spPageContextInfo.webAbsoluteUrl + "/_api/search/query?queryText='" + querySA + "'");
  • 因为格式问题,我把它放到了aswer中。

标签: javascript jquery


【解决方案1】:

您有 2 个问题,它们都很容易解决。

  • 根本不需要将region 传递给SearchResultsOnSuccess。您已经可以在那里使用它,因为它是在更高的范围内定义的。
  • 在您传递给$.ajax 的对象中,您没有将SearchResultsOnSuccess 设置为回调,而是在调用它。

换行:

success: SearchResultsOnSuccess(data, region) => success: SearchResultsOnSuccess

function SearchResultsOnSuccess(data, region) { => function SearchResultsOnSuccess(data) {

它应该可以正常工作。

编辑:

这是一个基本示例,说明您需要如何设置

function search(region) {
    $.ajax({
        url: 'example.com',
        method: 'GET',
        success: successCallback,
    });

    function successCallback(data) {
        console.log(data, region);
    }
}
search('LA');

【讨论】:

  • 是的,它正在工作,但我需要根据 'region' 的值对 DOM 执行一些操作,即在我将拥有的成功函数中 if(region == "LA") { $( '.cbs-ListLA').html(divHTML); } else { $('.cbs-ListRA').html(divHTML);以及 DOM 中的其他一些变化
  • 如果我尝试使用区域变量,我得到“区域”未定义。我得到了 $(document).ready(function() { var region = ""; region = "US"; getSearchResultsREST(region); region = "DE"; getSearchResultsREST(region); });没有参数的ajax调用中的属性success和函数SearchResultsOnSuccess(data)但区域不可达。
  • 用一个简化的例子更新了我的答案,说明如何在成功回调中使用搜索函数的参数。
【解决方案2】:

如果值包含 = 或 & 或空格或非 ASCII 字符,则必须对其进行 urlencode。

var querySA = encodeURIComponent('ClientSiteType:ClientPortal* contentclass:STS_Site Region=LA');
var queryDR = encodeURIComponent('ClientSiteType:ClientPortal* contentclass:STS_Site Region=EM');

    if(region == 'LA') {
        var searchURL = _spPageContextInfo.webAbsoluteUrl + "/_api/search/query?queryText=" + querySA;
    } else {
        var searchURL = _spPageContextInfo.webAbsoluteUrl + "/_api/search/query?queryText=" + queryDR;
    }

通常您不必将值放在撇号之间。

更新了答案,希望你能更了解我。

您的问题不是传递恕我直言的参数,而是您的服务器响应。 您应该:

  • 打开开发者工具并检查网络选项卡上的 XHR 请求,查找 /_api/search/query... 请求并检查响应
  • 仔细检查服务器端日志/研究您的搜索服务 API 文档如何组装正确的调用
  • 使用您最喜欢的 REST 客户端并使用您的服务:向那里发送查询并检查响应并检查它是否符合您的期望
  • 最后但同样重要的是,您可以将 ajax 调用者替换为 this quick-and-great one

$.ajax({
    url: searchURL,
    success: function (response) {
        $('#post').html(response.responseText);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    },
});

(当然,您的页面中应该有&lt;div id="post"&gt;&lt;div&gt;

如果被调用,恕我直言,您的成功函数会获取您的区域,但它不会,我希望使用这些技术中的一种或多种可以帮助您看清。

如果你真的确定你得到了你想要的,你可以进一步传递你的第二个参数,如here所描述的那样

【讨论】:

  • 成功函数上获取region的值有什么帮助?
  • 它没有帮助。如果您以这种方式将 queryXX 变量传递给 searchURL,您的搜索 API 将能够接收它。对我来说,您似乎已将区域直接传递给了成功函数,但只有当您的服务器端能够成功处理您的 API 请求时,才会调用成功函数。你检查过_api/search调用的响应码是2xx吗?
  • 好吧,如果我在没有参数的情况下将ajax调用中的成功属性更改为:成功:SearchResultsOnSuccess,而成功的函数为:函数SearchResultsOnSuccess(数据){这样我可以看到结果和200响应,但如果我包含原始帖子中提到的区域,我会收到“数据”未定义的错误。
  • 在这种情况下,您必须检查服务器日志并弄清楚如何正确调用您的服务。
  • 我想我正在正确调用服务,因为我收到了请求的信息,但想知道如何在成功函数中发送或使用区域变量中的值
猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多