Javascript 如何在jqueryajax中向success函数发送附加参数

Javascript 如何在jqueryajax中向success函数发送附加参数,javascript,jquery,Javascript,Jquery,我有以下Jquery代码,我试图在$('.cbs List').HTML(divHTML)中显示信息基于区域值。但在success函数中,我无法读取该区域的值,它表示 “数据未定义” 在这种情况下,向success函数传递参数或值的正确形式是什么 $(document).ready(function() { getSearchResultsREST('LA'); }); function getSearchResultsREST(region) { var quer

我有以下Jquery代码,我试图在
$('.cbs List').HTML(divHTML)中显示信息基于区域值。但在success函数中,我无法读取该区域的值,它表示

“数据未定义”

在这种情况下,向success函数传递参数或值的正确形式是什么

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

            }
        }
    }
$(文档).ready(函数(){
getSearchResultsREST('LA');
});
函数getSearchResultsREST(区域){
var querySA='ClientSiteType:ClientPortal*contentclass:STS_Site Region=LA';
var queryDR='ClientSiteType:ClientPortal*contentclass:STS_Site Region=EM';
如果(区域=='LA'){
var searchURL=_spPageContextInfo.webAbsoluteUrl+“/_api/search/query?queryText='“+querySA+”;
}否则{
var searchURL=_spPageContextInfo.webAbsoluteUrl+“/_api/search/query?queryText='“+queryDR+”;
}
$.ajax({
url:searchURL,
方法:“获取”,
标题:{
“接受”:“application/json;odata=verbose”
},
contentType:“application/json;odata=verbose”,
成功:SearchResultsOnSuccess(数据、区域),
错误:函数(错误){
$(“#相关内容结果”).html(JSON.stringify(error));
}
});
}
函数SearchResultsOnSuccess(数据,区域){
var结果;
var divHTML='';
如果(数据d){
结果=data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;
如果(results.length==0){
$(“#相关内容结果”).html(“+_spPageContextInfo.webAbsoluteUrl上没有请求查询的数据);
}否则{

对于(i=0;i,如果值包含=或&或空格或非ASCII字符,则必须对其进行URL编码

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;
    }
通常你不需要把你的值放在撇号之间

我更新了答案,希望你能更好地理解我

您的问题不是传递IMHO的参数,而是服务器响应。 你应该:

  • 打开开发者工具并检查网络选项卡上的XHR请求,查找/_api/search/query…请求并检查响应
  • 仔细检查服务器端日志/研究搜索服务API文档如何组合正确的调用
  • 使用您最喜欢的REST客户端,在您的服务周围玩耍:发送查询,检查响应,并检查它是否符合您的期望
  • 最后但并非最不重要的一点是,您可以将ajax调用者替换为:
$.ajax({
url:searchURL,
成功:功能(响应){
$('#post').html(response.responseText);
},
错误:函数(jqXHR,异常){
var msg='';
if(jqXHR.status==0){
msg='未连接。\n验证网络';
}else if(jqXHR.status==404){
msg='未找到请求的页面。[404]';
}else if(jqXHR.status==500){
msg='内部服务器错误[500]。';
}else if(异常==='parserrror'){
msg='请求的JSON解析失败';
}else if(异常==='timeout'){
msg='超时错误';
}否则如果(异常==='abort'){
msg='Ajax请求已中止';
}否则{
msg='未捕获错误。\n'+jqXHR.responseText;
}
$('#post').html(msg);
},

});
您有两个问题,它们都很容易解决

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

success:SearchResultsOnSuccess(数据,区域)
=>
success:SearchResultsOnSuccess

函数SearchResultsOnSuccess(数据,区域){
=>
函数SearchResultsOnSuccess(数据){

它应该很好用

编辑:

下面是一个基本示例,说明如何设置此功能

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

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

您必须对属性进行URL编码:将encodeURIComponent()添加到searchURL而不是值本身。您的意思是如果(region='LA'){var searchURL=encodeURIComponent(_spPageContextInfo.webAbsoluteUrl+“/_api/search/query?queryText='+querySA+“'));由于格式问题,我将其放入了aswer。它如何帮助获取成功函数上区域的值?它没有帮助。如果您以这种方式将queryXX变量传递给searchURL,您的搜索API将能够接收它。对我来说,您似乎已将区域直接传递给成功函数,但成功函数w只有在服务器端能够成功处理API请求的情况下才会调用。您是否检查了_API/搜索调用的响应代码是否为2xx?如果我将ajax调用中的success属性更改为:success:SearchResultsOnSuccess,将success函数更改为:function SearchResultsOnSuccess(数据){这样我可以看到结果和200个响应,但是如果我包括我在原始帖子中提到的区域,我得到的错误是“数据”未定义。在这种情况下,你必须检查服务器日志并找出如何正确调用你的服务。我想我调用服务是正确的,因为我得到了b请求的信息ut想知道如何在success函数中发送或使用value-in-region变量是的,它正在工作,但我需要基于'region'的值在DOM上执行一些操作,即在success函数中,如果(region==“LA”){$('.cbs ListLA').html(divHTML);}else{$('.cbs ListRA').html