我在更改div的内容时遇到问题。我先做一个ajax调用,然后从服务器接收一个JSON数组。到现在为止还挺好。然后,我想将几个div的内容更改为我从服务器收到的内容。问题是第一次点击时内容不会改变。每次回复都没问题,我已经和Fiddler一起检查了我的代码,我收到了正确的答复。但是,神秘仍然是为什么我的页面上的div没有随着第一次点击而改变为什么我每次都要点击两次?我花了好几个小时搞清楚这一点,尝试了一切,没有什么是合乎逻辑的。这是我的代码(项目是MVC 4):
$('#btnsearch').click(function ()
{
var searchStr = $('#txtSearch').val();
var noOfPages = 1;
$.ajax({
type: "POST",
datatype: 'json',
url: $('#btnsearch').data('request-url'),/*URL from Razor's page*/
data: { pageNo: noOfPages, searchString: searchStr },/*MVC 4 call*/
success: function (jsontext)
{
$('#hiddenSearchResult').val(jsontext);
},
error: function ()
{
alert('Error when searching!');
}
});
var json = $('#hiddenSearchResult').val();
if (json.length === 0){ alert('result is empty!');
return;}/*with empty json, parsing throws error*/
json = JSON.parse(json);
if (json.Content == undefined) return;
for (var i = 0; i < json.Content.length; i++) {
switch (i) {
case 0:
$('#snippetsdivinner').html(json.Content[i].ContentString);
break;
case 1:
$('#snippetsdivinner1').html(json.Content[i].ContentString);
break;
case 2:
$('#snippetsdivinner2').html(json.Content[i].ContentString);
break;
case 3:
$('#snippetsdivinner3').html(json.Content[i].ContentString);
break;
}
}
});
答案 0 :(得分:3)
从var json = $('#hiddenSearchResult').val()
开始的代码在AJAX请求启动后立即执行,但在完成之前执行,因此当时$('#hiddenSearchResult')
尚未填充。
当您第二次单击该按钮时,它已经由AJAX请求的完成填充,因此$.ajax
之后的代码将按预期执行。
您应该在success
函数中移动代码,以便在AJAX请求完成时全部执行。
答案 1 :(得分:1)
这是异步的,你需要等到结果
$('#btnsearch').click(function ()
{
var searchStr = $('#txtSearch').val();
var noOfPages = 1;
$.ajax({
type: "POST",
datatype: 'json',
url: $('#btnsearch').data('request-url'),/*URL from Razor's page*/
data: { pageNo: noOfPages, searchString: searchStr },/*MVC 4 call*/
success: function (jsontext)
{
if (jsontext.length === 0){ alert('result is empty!');
return;
}/*with empty json, parsing throws error*/
var json = JSON.parse(jsontext);
if (json.Content == undefined) return;
for (var i = 0; i < json.Content.length; i++) {
switch (i) {
case 0:
$('#snippetsdivinner').html(json.Content[i].ContentString);
break;
case 1:
$('#snippetsdivinner1').html(json.Content[i].ContentString);
break;
case 2:
$('#snippetsdivinner2').html(json.Content[i].ContentString);
break;
case 3:
$('#snippetsdivinner3').html(json.Content[i].ContentString);
break;
}
}
},
error: function ()
{
alert('Error when searching!');
}
});
});
答案 2 :(得分:1)
您可能还需要将所有代码从
开始var json = $('#hiddenSearchResult').val();
在你的ajax的成功回调中。
答案 3 :(得分:1)
如果您在ajax通话中使用datatype: 'json'
,则无需执行json = JSON.parse(json);
。
关于将所有代码放在success
回调函数中的其他答案。