Tôi có một trang nơi tôi nhập tên thẻ và chi tiết của thẻ được trình bày qua AJAX. Tôi đã xóa nhiều mã trong ví dụ này không liên quan đến vấn đề này và tôi đã thử nghiệm mã đơn giản này và nó tái tạo cùng một lỗi.Chức năng gọi bên trong đáp ứng thành công jQuery ajax hoạt động một lần nhưng không hai lần
Điều bí ẩn là nó hoạt động tốt trong lần chạy đầu tiên thông qua hàm testSelectedCardDetails
. Nó gọi setNameCardIsFromField
tiền phạt và làm những gì nó có nghĩa là để làm. Lần thứ hai thông qua nó chết với giao diện điều khiển hiển thị:
Uncaught TypeError: setNameCardIsFromField is not a function
Có chuyện gì vậy? Tôi thành thật không biết đủ về cách jQuery hoạt động để có thể giải quyết vấn đề vì vậy tôi chuyển sang thế giới stackoverflow để xin ơn cứu độ khỏi sự điên rồ này. ;)
function testSelectedCardDetails(cardName) {
var cardTestInfoArray = [];
$.ajax({
url: 'includes/getCardAndSetDataViaAJAX.php',
type: 'POST',
cache: false,
async: false, // if set to true then the data doesn't get here fast enough to run commands in 'success'
dataType: 'json',
data: { callThis: "testSelectedCardDetails", thisCardName: cardName},
error: function(data){
console.log("AJAX failed to get card info.");
},
success: function(data) {
$.map(data, function (value) { cardTestInfoArray = value; });
cardPresentInfo['printings'] = cardTestInfoArray['printings'];
//automatically set setNameCardIsFrom field
setNameCardIsFromField(cardPresentInfo['printings']);
}
});
}
Đây là chức năng được gọi là:
function setNameCardIsFromField(setCode) {
$.ajax({
url: 'includes/getCardAndSetDataViaAJAX.php',
type: 'POST',
cache: false,
async: false, // if set to true then the data doesn't get here fast enough to run commands in 'success'
dataType: 'text',
data: { callThis: "setNameCardIsFromField", thisSetCode: setCode},
error: function(data){
console.log("AJAX failed to get card info.");
},
success: function(setName) {
//console.log(setName);
setNameCardIsFromField = document.querySelector('#setNameCardIsFrom');
setNameCardIsFromField.value = setName;
}
});
}
Tôi quá khiêm tốn. Tôi thực sự cần phải học jQuery đúng cách. Ngay bây giờ tôi chỉ cần hack đi hy vọng cho tai nạn hạnh phúc và nhận được thất vọng như thế này quá thường xuyên. Sự cố tôi đã có với async: true, là dữ liệu không đủ nhanh để hoạt động. Tôi đã dành hàng giờ với một vấn đề như thế và khi tôi đặt nó thành 'sai', nó đã sửa nó. Phải làm gì? Tôi muốn làm những việc đúng nhưng ....? – ekendra
@ekendra Truyền một hàm chứa những gì bạn muốn làm vào thành công 'setNameCardIsFromField' và gọi nó trong trình xử lý' success'. –