如何在jQuery Ajax中将其他参数发送到成功函数

时间:2018-09-11 17:30:33

标签: javascript jquery

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

  

“数据未定义”

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

$(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);

            }
        }
    }

2 个答案:

答案 0 :(得分:0)

如果该值包含=或&或空格或非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客户端并试用您的服务:向那里发送查询并检查响应,并检查其是否符合您的期望
  • 最后但并非最不重要的一点,您可以用this quick-and-great one替换ajax调用者:

$.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);
    },
});

(当然,您应该在页面中的某个地方放置一个<div id="post"><div>

您的成功函数恕我直言,如果被调用,它将获得您所在的区域,但事实并非如此,我希望使用其中的一种或多种技术可以帮助您看清。

如果您确实确定要得到想要的东西,则可以按照here

的说明继续传递第二个参数

答案 1 :(得分:0)

您有两个问题,而且都很容易解决。

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

更改行:

SearchResultsOnSuccess => success: SearchResultsOnSuccess(data, region)

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

它应该可以正常工作。

编辑:

这是您需要如何设置的基本示例

function SearchResultsOnSuccess(data) {