我有以下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);
}
}
}
答案 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;
}
通常,您不必将值放在撇号之间。
我更新了答案,希望您能更好地理解我。
您的问题不是传递恕我直言的参数,而是您的服务器响应。 您应该:
$.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) {