في xmlhttp.onreadystatechange وظيفة، كيف يمكنني تمرير اسم معرف أريد أن تعديل؟

StackOverflow https://stackoverflow.com/questions/1425358

  •  07-07-2019
  •  | 
  •  

سؤال

إليك قانون بلدي. رؤية الخط الذي علق بها. عند ضمنية هوية عنصر (والذي هو فترة)، وأنها تعمل. عند إنشاء معرف بواسطة وصل المتغيرات التي تم تمريرها إلى stateChanged، فإنه لا يعمل. أنا لا يسمح لتمرير المتغيرات في لstateChanged؟ ما هو الخطأ؟

function multiplePassportPoints(id, counter)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="addmorepoints.php"; 
url=url+"?id="+id+"&c="+counter;
url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged(id,counter);
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged(id, counter) 
{
  if (xmlhttp.readyState==4)
  {
    //THIS WORKS (assuming id is 99 and counter is 5:
    //document.getElementById("99_5").innerHTML += xmlhttp.responseText; 

    //BUT I NEED IT TO WORK LIKE THIS:
    document.getElementById(studentID+"_"+counter).innerHTML += xmlhttp.responseText; 
  }
}

وشكرا!

هل كانت مفيدة؟

المحلول

يمكنك تغيير رمز لهذا

xmlhttp.onreadystatechange = function () {
        stateChanged(id,counter);
    };    

نصائح أخرى

 <script type="text/javascript">
 var i=1;
 function validate(str)
 { 
 xmlHttp=GetXmlHttpObject()
 var url="checkvalidate.php"
 url=url+"?User9="+str
 xmlHttp.onreadystatechange=stateChanged19 
 xmlHttp.open("GET",url,true)
 xmlHttp.send(null)
 }
function stateChanged19() 
 {  

 if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  { 

  document.getElementById("valid"+i)
  .innerHTML=xmlHttp.responseText 
  i=i+1;
   } }
 </script>

وهناك طريقة أفضل والتي يمكن أن يطلق عليه عدة مرات قبل انتهاء المكالمة السابقة. لاحظ أنه إذا كنت استدعاء multiplePassportPoints مرتين القيمة السابقة الخاصة بك من XMLHTTP سيحصل الكتابة. هناك نتيجتين:
1- كل شيء يعمل بشكل جيد عندما لم يحدث التزامن (احتمال كبير جدا)،
2- الدعوة الأولى لم يحدث (الاحتمال الضعيف جدا لكنه لن يحدث من وقت لآخر، وسوف يكون من الصعب جدا على الفور والتكاثر)

ولكن التعليمة البرمجية التالية يستخدم المتغير المحلي وقد (لم تختبر) تكون آمنة للاتصال مرارا وتكرارا.

function multiplePassportPoints(id, counter) {
  var xmlhttp=GetXmlHttpObject();
  if (xmlhttp==null)
  {
    alert ("Browser does not support HTTP Request");
    return;
  }

  var url="addmorepoints.php"; 
  url=url+"?id="+id+"&c="+counter;
  url=url+"&sid="+Math.random();

  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4) {
      stateChanged(id, data, xmlhttp.responseText);
    }
  };

  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
}

function stateChanged(id, counter,text) 
{
    document.getElementById(id+"_"+counter).innerHTML += text; 
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top