将网络请求从同步转换为异步(PHP / Javascript)

时间:2015-07-24 08:16:32

标签: javascript php asynchronous synchronous

我实际上将PHP脚本用于广告网络,但发布者将使用的代码是同步的。 现在,我希望脚本将加载异步。

我是否需要更改所有PHP / Javascript代码? 或者有一个技巧(javascript库...)

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

同步/异步取决于客户端。除非非常特别的例外。

所以专注于Javascript代码https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests

修改 示例:将文件发送到控制台日志

这是异步XMLHttpRequest的最简单用法。

var request = new XMLHttpRequest();
request.open('GET', 'http://...', false/*ASYNCHRONOUS=false, it is SYNCHRONOUS)*/
request.send(null);
/*anything else is stopped around, one thread working only:request*/

   /*once it is done, the next line is executed. This is:*/
    if (request.status === 200) {
      console.log(request.responseText);
    }

相反,这是同步

{{1}}

因此,在JS代码中完成JS Sync方法并为另一个代码更改一个。

答案 1 :(得分:1)

我不完全确定,但我认为jQuery Ajax调用是你想要的。 http://api.jquery.com/jquery.ajax/

以下是ajax调用示例:

        ImageView chatHead = new ImageView(this);
        chatHead.setImageResource(R.drawable.battery_20);
        final Animation fadeOut = new AlphaAnimation(1, 0);
        fadeOut.setInterpolator(new AccelerateInterpolator());
        fadeOut.setStartOffset(50);
        fadeOut.setDuration(3000);

        fadeOut.setAnimationListener(new Animation.AnimationListener()
        {
            public void onAnimationEnd(Animation animation)
            {
                chatHead.setVisibility(View.GONE);
            }
            public void onAnimationRepeat(Animation animation) {}
            public void onAnimationStart(Animation animation) {}
        });

        chatHead.setAnimation(fadeOut);

        chatHead.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chatHead.setVisibility(View.INVISIBLE);

  }
        });

此外,由于PHP总是返回字符串,为了成功,您只需使用:

$.ajax({
 url: formURL,
 type: "POST",
 data: postData,
 beforeSend: function() {
    //this code always run Ususaly UI changes
 },
 success: function(data, textStatus, jqXHR) {
    //var result = JSON.parse(data);
 },
 error: function(jqXHR, textStatus, errorThrown) {
    //if ajax fails 
 },
 complete: function(response) {
   // this code always run Ususaly UI changes
 }
});

如果你想返回一个数组,你应该:

 "echo $string;" 

对于错误部分,最好强制PHP返回错误,例如:

"echo json_encode($array);"