为什么我的.ajax请求不起作用?

时间:2012-06-15 05:08:03

标签: php jquery ajax

我想要的代码:

    $.ajax({
        type: "POST",
        url: "_Source/ajap/ajap.nlSrch.php",
        data: { sndJson : jsonData },
        dataType: "json", 
        processData: false,
        success: function(html) {
      $("#srchFrm").append(html);}
    });

有效的代码:

    $.ajax({
        type: "POST",
        url: "_Source/ajap/ajap.nlSrch.php",
        data: { sndJson : jsonData },
        success: function(html) {
      $("#srchFrm").append(html);}
    });

不幸的是,当我发送第一个时,我的帖子数据看起来像“Array()”,当我使用后者时,我得到这个“数组([sndJson] => [\”8 \“,\”3 \ “,\”6 \“,\”7 \“])”。

我知道必须有一个简单的解释,但我无法弄明白。

请帮忙!

4 个答案:

答案 0 :(得分:2)

尝试在查询字符串中发送数据......

$.ajax({
        type:"POST",
        url:"_Source/ajap/ajap.nlSrch.php?json="+jsonData,
        dataType:"json", 
        success: function(data) {
              $("#srchFrm").append(data);}
        error: function(xhr, ajaxOptions, thrownError)
        {alert("Error!");}
    });

答案 1 :(得分:1)

您可以使用简写$ .post而不是使用低级别的ajax类---因为您不需要高级处理。所以,这个就足够了。

$(document.ready(function(){    
  $("#submit_button").click(function(){     
    $.post('php_script.php', {
     // here's what you want to send  
     // important -- double quotes, 'cause It's evals as valid JSON
     "var1" : "val1"  
     "var2" : "val2"    
    }, function (respond){
       try {
           var respond = JSON.parse(respond);
        } catch(e){
           //error - respond wasn't JSON
        }
    });  
  });
});

PHP代码:

<?php
/**
 * Here you can handle variable or array you got from JavaScript
 * and send back if need.
 */ 
 print_r($_POST); // var1 = val1, var2 = val2

&GT;

回到你的问题, 为什么我的.ajax请求不起作用? 这是因为JavaScript会引发致命错误并停止进一步的代码执行。

只需添加

即可捕获并确定错误时机

try {} catch(){}阻止您认为可能发生任何错误的声明

答案 2 :(得分:0)

当你指定dataType:json时,jQuery会自动评估响应并返回一个Javascript对象,在本例中是一个数组。您正在获取结果并将其作为html添加到#srchForm,因此将其转换为javascript对象没有意义。使用dataType:html,或者根本不使用。

http://api.jquery.com/jQuery.ajax/

答案 3 :(得分:0)

以上示例不可重复使用。我是可重复使用代码的忠实粉丝。这是我的解决方案。

软件设计101:
干不要重复你的自我。您应该将代码包装到对象中。这样你就可以从任何地方调用它。

var Request = {
    version: 1.0, //not needed but i like versioning things
    xproxy: function(type, url, data, callback, timeout, headers, contentType) 
    {
        if (!timeout || timeout <= 0) { timeout = 15000; }
        $.ajax(
        {
            url: url,
            type: type,
            data: data,
            timeout: timeout,
            contentType: contentType,
            success:function(data) 
            {
                if (callback != undefined) { callback(data); }
            },
            error:function(data) 
            {
                if (callback != undefined) { callback(data); }
            }, 
            beforeSend: function(xhr)
            {
                //headers is a list with two items
                if(headers)
                {
                    xhr.setRequestHeader('secret-key', headers[0]);
                    xhr.setRequestHeader('api-key', headers[1]);
                }
            }
        });
    }
};

用法:

<script type="text/javascript">
var contentType = "applicaiton/json";
var url = "http://api.lastfm.com/get/data/";
var timeout = 1000*5; //five seconds
var requestType = "POST"; //GET, POST, DELETE, PUT

var header = [];
header.push("unique-guid");
header.push("23903820983");

var data = "{\"username\":\"james\"}"; //you should really deserialize this w/ a function
function callback(data)
{
   //do logic here
}
Request.xproxy(requestType, url, data, callback, timeout, header, contentType);
</script>